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 回答
printf
函数的 pre-conditions 要求您将数据指针作为参数传递给%p
- 更具体地说,是void*
类型的指针。obj1
不是数据指针;它是issue
的一个实例。违反printf
printf
的行为未定义。obj1.issue_c2
是一个指针,但它是指向const char
而不是void
的指针,因此它也违反了 pre-condition。