打印地址和结构地址之间的区别[关闭]

Posted

技术标签:

【中文标题】打印地址和结构地址之间的区别[关闭]【英文标题】:Difference between printing the address and Structure address [closed] 【发布时间】:2018-12-12 08:57:03 【问题描述】:
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&obj1 打印相同的地址。但是打印出来后地址就不一样了。

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

【问题讨论】:

To code 是废话,所以它打印废话。你还期待什么?您不能使用%p 打印对象。打印未初始化指针的内容也不会打印任何有意义的内容。 问题是什么? 这段代码甚至不能编译,如果它编译,它不应该在现实场景中给出那个输出。请提供minimal reproducible example。 这段代码将被编译。只需要 obj1.issue_c2 和 &obj1.issue_c2 之间的区别。 【参考方案1】:

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

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

【讨论】:

以上是关于打印地址和结构地址之间的区别[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从ip addr add和ifconfig的区别看linux网卡ip地址的结构

GCC和G ++结构包装的区别?

sockaddr和sockaddr_in的区别

sockaddr和sockaddr_in的区别

为啥我们需要 RPC 编程? [关闭]

物理Dg和逻辑dg的区别