'What is causing "warning: assignment from incompatible pointer type error"?
I'm trying to experiment here with pointer arithmetic, but I get this warning. I am unable to understand where is this going wrong.
The code is written to play with pointer arithmetic since my basics are weak.
printf("To Check ptrs \t");
int var[3]={10,20,30};
int *ptr,i;
ptr=var;
for(i=0;i<3;i++)
{
printf("Address is %d \t", ptr);
printf("Value is %d \t", *ptr);
ptr++;
}
ptr=(int*)&var;
for(i=0;i<3;i++)
{
printf("Address is %d \t", &ptr[i]);
printf("Value is %d \t", ptr[i]);
}
ptr_arith.c:14:5: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
ptr=&var;
^
I got the desired output, though. Also, when I use
ptr=(int*) &var;
,it doesn't give me any error. So if someone can tell me what's causing it to be "incompatible", I'll be thankful.
Solution 1:[1]
It is very simple.
You should arrays decays to pointers in the following way:
int arr[10];
arr
is of type int *
&arr[0]
- is of type int *
&arr
is of type pointer to the array of 10 integers.
In your code you shuld use
ptr = var
or ptr = &var[0]
as var
and &var[0]
have the same type as pointer ptr
.
&var
different type, thus the warning.
Solution 2:[2]
if you want to store a address of a array using pointer use type conversion before assigning address of a array
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | gokulapriyan |