0
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)

这里的预期行为是什么?或者这只是巧合?

4

2 回答 2

2

这里的预期行为范围可以从打印垃圾到鼻恶魔,因为这种行为是未定义的。说明%x符使printfexpect 是一个整数,但它得到一个结构,所以一切皆有可能。这里最有可能发生的是它会打印,但它也可能再次生成一个通往Петропа́вловск-Камча́тскийs.x的单向门户。

于 2013-10-07T00:57:08.517 回答
0

结构元素不是指针。它不会打印结构的任何地址。那只是您正在考虑作为结束地址的垃圾值。垃圾未定义。

结构元素不是数组那样的指针。

%x – 打印一个十六进制整数

于 2013-10-07T00:52:57.497 回答