【发布时间】:2021-04-01 12:03:57
【问题描述】:
我是 C 的初学者,最近发现数组名称是指向数组第一个元素的地址的指针,这是一个非常容易理解的概念,因为指针是一个保存内存的变量地址。
int x[4];
printf("%p",x); // x is a pointer
我无法理解的是以下代码:
int x[4], *ptr;
ptr = x;
这很简单,但是第二行 ptr = x 指向指针 x,这不会使 ptr 成为指向指针的指针,这意味着我需要将 ptr 声明为 int **ptr 吗?如果我的理解没有记错的话,x 存储了x[0] 的地址,所以这样做ptr = x,就是让ptr 指向另一个指针x,使其本质上指向一个指针。
【问题讨论】:
-
这能回答你的问题吗? Assigning char array to pointer
-
不,在
ptr = x;x 将衰减为指针表达式(即:具有类型 `指向 int 的指针) -
你可能会喜欢comp.lang.c faq的第6部分。
-
@prehistoricpenguin 并不是我已经熟悉了这样一个事实,即 &array_name 指的是整个数组,而 array_name 指的是数组的第一个元素
-
@pmg 感谢这篇文章很有帮助