typedef struct s {
int x;
int y;
} S;
typedef struct t {
S s;
}
T t = {0};
T *pointer_to_T = &t;
printf("End address %x", pointer_to_T->s);
printf("Beginning address %x", &(pointer_to_T->s));
根据我的测试,pointer_to_T-> s是结构S的结尾地址
pointer_to_T->s - &(pointer_to_T->s) = sizeof(S)
这里的预期行为是什么?或者这只是巧合?
答案 0 :(得分:2)
此处的预期行为可以从打印垃圾到nasal demons,因为此行为未定义。 %x
说明符使printf
期望一个整数但它得到一个结构,所以一切皆有可能。这里最有可能发生的是它会打印s.x
,但同样可能会产生一个单向门户Петропа́вловск-Камча́тский。
答案 1 :(得分:0)
结构元素不是指针。它不会打印任何结构的地址。这只是垃圾值,你正在考虑作为结束地址。垃圾是未定义的。
结构元素不是指向数组的指针。
%x - 打印十六进制整数