首页 > 解决方案 > C数组中的指针地址

问题描述

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

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

这段代码的输出是:

0x7ffc9ab53f43 0x7ffc9ab53f43

但我期待阅读两个不同的地址。

标签: carraysstringpointers

解决方案


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

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

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


推荐阅读