当我使用这段代码时,GCC会给我一个“初始化类型不兼容的指针”的警告(尽管代码正常工作并完成了它应该完成的任务,即打印数组的所有元素)。
#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");
}
然而,当我使用这部分代码时,没有任何警告被给出。
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");
}
这两个片段唯一的区别在于我将 *p = &arr 和 *q = arr 分配不同的值。
- & 的作用是什么?
- 为什么代码在这两种情况下执行并给出完全相同的输出?
gcc -std=c11 -pedantic-errors
来编译 C 代码是一个好习惯。这将防止您执行无效的 C 代码。 - Lundin