Ham*_*Dev 1 c arrays pointers memory-address
通过在我的计算机上运行这个程序,我得到了相同的地址。我支持 的情况array,&array[0]我理解 的名称array指向 中第一项的地址array。而且两者都是一样的。
但我无法理解为什么 name ofarray和&array指向同一个地址。我想到的是,它将打印存储数组中第一项地址的指针的地址。
#include <stdio.h>
int main()
{
char arr[3];
printf("array = %p\n", arr);
printf("&array[0] = %p\n", &arr[0]);
printf("&array = %p\n", &arr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
array = 0061FF1D
&array[0] = 0061FF1D
&array = 0061FF1D
Run Code Online (Sandbox Code Playgroud)
需要注意的是,虽然数组和指针之间有一些相似之处,但它们并不相同。
该名称array不指向第一项的地址。它实际上是整个数组。造成混乱的原因是,在大多数情况下,数组的名称会衰减为指向其第一个成员的指针。
不会发生数组到指针衰减的两个值得注意的地方是当数组是sizeof运算符或地址运算符的操作数时&。对于后者,数组是一组连续的对象,并且(像任何对象一样)它有一个地址。数组的地址与其第一个成员的地址相同,因此array(当在表达式中使用时,或等效地&array[0]) and&array将具有相同的值但不同的类型。
在您的特定情况下,&array[0]has typechar *而&arrayhas type char (*)[3](即指向大小为 3 的数组的指针char)。