首页 > 解决方案 > 打印地址和结构地址的区别

问题描述

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. 最初我认为obj1and&obj1打印相同的地址。但是打印出来后地址就不一样了。

obj1 of issue1 0x7ffdb24c5b08
obj1 of issue2 0x7ffdb24c5a00
obj1 of issue3 0x7ffdb24c5b00
obj1 of issue4 0x7ffdb24c5a10

标签: c++cprintf

解决方案


printf函数的前提条件要求您将数据指针作为参数传递给%p- 更具体地说,是类型的指针void*

obj1不是数据指针;它是 的一个实例issue。违反 的先决条件的行为printf是未定义的。obj1.issue_c2是一个指针,但它是一个指向const char而不是的指针void,所以它也违反了前置条件。


推荐阅读