GCC gives me the warning “Initialization from an incompatible pointer” when I use this code (although the code works fine and does what it should do, which prints all the elements of the array).
#include <stdio.h>
int main(void)
{
int arr[5] = {3, 0, 3, 4, 1};
int *p = &arr;
printf("%p\n%p\n\n", p);
for (int a = 0; a < 5; a++)
printf("%d ", *(p++));
printf("\n");
}
However, no warnings appear when I use this bit of code
int main(void)
{
int arr[5] = {3, 0, 3, 4, 1};
int *q = arr;
printf("%p\n%p\n\n", q);
for (int a = 0; a < 5; a++)
printf("%d ", *(q++));
printf("\n");
}
The only difference between the two fragments is that I assign * p = & arr and * q = arr.
- What distinguishes and what does?
- And why does the code execute and give the same result in both cases?
Nathu source
share