我是 C 新手,正在尝试理解以下代码
#include <stdio.h>
int main() {
int i[3] = {1, 2, 3};
int* p = &i;
printf("%d\n", *p);
printf("%d\n", *(&i));
return 0;
}
我认为'i'是指向数组第一个元素的指针,那么'&i'一定是指向指针的指针。但我们这里有一个任务
int* p = &i;
C 仍然允许它,并带有警告“int* 与 int(*)[3] 的间接级别不同”。我认为这个作业不应该被允许,因为它有点奇怪。
然后 '*p" 的结果是 '1'。我不明白为什么会变成这样。我尝试用 google 搜索上面的警告,从指针到数组地址到 int 指针的赋值等,但还没有'没有找到我需要的东西。
感谢您的宝贵时间。
我认为“i”是指向数组第一个元素的指针......
不。在某些情况下,变量
i
可能会 decay 成为指向第一个元素的指针,但 i
本身是整数数组 {1, 2, 3}
。
并且,由于
1
之前没有填充,因此 i
的地址与 1
的地址相同。