将数组地址的地址赋给C中的指针

问题描述 投票:0回答:1

我是 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 指针的赋值等,但还没有'没有找到我需要的东西。

感谢您的宝贵时间。

c pointers memory
1个回答
0
投票

我认为“i”是指向数组第一个元素的指针......

不。在某些情况下,变量

i
可能会 decay 成为指向第一个元素的指针,但
i
本身是整数数组
{1, 2, 3}

并且,由于

1
之前没有填充,因此
i
的地址与
1
的地址相同。

© www.soinside.com 2019 - 2024. All rights reserved.