打印地址和结构地址之间的区别

时间:2018-12-12 08:57:04

标签: c++ c printf

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

1 个答案:

答案 0 :(得分:1)

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

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