C数组中的指针地址

时间:2019-01-07 11:07:51

标签: c arrays string pointers

C中字符串的名称是一个常量值,其中包含该字符串第一个元素的地址。现在我的问题是:为什么这个常量变量和他的指针包含相同的地址?

char str[] = "hola";
printf("%p %p", &str, str);

此代码的输出是:

0x7ffc9ab53f43 0x7ffc9ab53f43

但是我希望读取两个不同的地址。

2 个答案:

答案 0 :(得分:1)

让我们看一下数组如何存储在内存中(插入指向元素的指针):

+--------+--------+--------+--------+--------+
| str[0] | str[1] | str[2] | str[3] | str[4] |
+--------+--------+--------+--------+--------+
^
|
&str[0]
|
&str

指针&str[0]str衰减到的指针)指向数组的第一个元素。数组的第一个元素也是数组本身的地址。因此(void *) &str[0] == (void *) &str是正确的。

答案 1 :(得分:0)

查看此链接Pointer address in a C array

并尝试使用此代码(它有助于我深入了解问题)

#include<stdio.h>

int main()
{
int arr[] = {1,2,3,4,5};
int (*ptr2)[sizeof(arr)/sizeof(*arr)] = &arr;

printf("%d\n",sizeof(arr));
printf("%d\n",sizeof(*arr));
printf("%d\n",sizeof(ptr2));
printf("%d\n",sizeof(*ptr2));
}