c++ - 打印地址和结构地址的区别
问题描述
struct issue {
const char *issue_c2;
};
int main {
struct issue obj1;
printf("obj1 of issue1 %p\n", &obj1);
printf("obj1 of issue2 %p\n", obj1);
printf("obj1 of issue3 %p\n", obj1.issue_c2);
printf("obj1 of issue4 %p\n", &obj1.issue_c2);
}
在上面的代码中,我尝试打印obj1
. 最初我认为obj1
and&obj1
打印相同的地址。但是打印出来后地址就不一样了。
obj1 of issue1 0x7ffdb24c5b08
obj1 of issue2 0x7ffdb24c5a00
obj1 of issue3 0x7ffdb24c5b00
obj1 of issue4 0x7ffdb24c5a10
解决方案
该printf
函数的前提条件要求您将数据指针作为参数传递给%p
- 更具体地说,是类型的指针void*
。
obj1
不是数据指针;它是 的一个实例issue
。违反 的先决条件的行为printf
是未定义的。obj1.issue_c2
是一个指针,但它是一个指向const char
而不是的指针void
,所以它也违反了前置条件。
推荐阅读
- python - 有没有一种方法可以返回一个数组的索引,从而在没有 for 循环的情况下最小化多个数组的函数的输出?
- android - JetPack Compose 禁用 BottomSheet 外部触摸
- delegates - UE4动态委托ExcuteIfBound不执行我的功能
- logging - 在日志资源管理器中合并 Google Cloud Logs 行
- html - 将我的事件查看器表转换为 HTML 表
- asp.net - Dotnet 5.0 引用不包含的子实体
- docker - 我需要帮助。为什么错误 docker-compuse,wireguard?
- python - Python 3.9: Unit testing of retrieving data from Cloud Datastore
- html - 当内容的高度发生变化时,保持项目在同一点垂直对齐
- r - 提取部分文件名并变异到列 dplyr R