'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 |
