c - C数组中的指针地址
问题描述
C 中字符串的名称是一个常量值,其中包含字符串第一个元素的地址。现在我的问题是:为什么这个常量变量和他的指针包含相同的地址?
char str[] = "hola";
printf("%p %p", &str, str);
这段代码的输出是:
0x7ffc9ab53f43 0x7ffc9ab53f43
但我期待阅读两个不同的地址。
解决方案
让我们看看你的数组是如何存储在内存中的(插入了指向元素的指针):
+--------+--------+--------+--------+--------+ | 字符串 [0] | 字符串[1] | 字符串[2] | 字符串[3] | 字符串[4] | +--------+--------+--------+--------+--------+ ^ | &str[0] | &str
指针&str[0]
(str
衰减到)指向数组的第一个元素。数组的第一个元素也是数组本身的地址。因此(void *) &str[0] == (void *) &str
是真的。
推荐阅读
- excel - Excel VBA - 每次执行后宏的执行时间变慢
- c# - 在 MSBuild 项目中使用 .net core sdk
- amazon-web-services - 使用 AWS Certificate Manager 的 SSL 证书?
- java - 获取导入 org.springframework.web.bind.annotation.CrossOrigin 无法解决错误
- git - 将 git 子模块用于外部存储库,而无需在 .gitmodules 文件中使用密码
- node.js - cognitoidentityserviceprovider.getUser() 是如何工作的?
- java - Embedded Jetty 上的 REST 和 SOAP,SOAP 单独工作,但如果 REST 运行则不能
- java - 使用具有多个条件的 Java 更新 Mongo 嵌套数组
- mysql - 我想创建数据库来管理三种类型的用户?
- javascript - Facebook 聊天插件获取发件人 URL