GCC gives me an 'Initialization from incompatible pointer type' warning when I use this code (though the code works fine and does what it's supposed to do, which is print 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
%p
", p);
for (int a = 0; a < 5; a++)
printf("%d ", *(p++));
printf("
");
}
However no warning is given when I use this bit of code
int main(void)
{
int arr[5] = {3, 0, 3, 4, 1};
int *q = arr;
printf("%p
%p
", q);
for (int a = 0; a < 5; a++)
printf("%d ", *(q++));
printf("
");
}
The only difference between these two snippets is that I assign *p = &arr and *q = arr .
- Exactly what different is the & making ?
- And why does the code execute and give the exact same output in both the cases ?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…