我有以下c程序
struct in_addr {
unsigned long s_addr; // load with inet_aton()
};
struct sockaddr_in {
short a;
unsigned short b;
struct in_addr c;
char d[8];
};
int main(int argc, char** argv) {
struct sockaddr_in *record1;
record1 = (struct sockaddr_in*)malloc(sizeof(struct sockaddr_in*));
memset(record1, 0, 14);
record1->a = 16;
record1->b = 4;
//strcpy(record1->sin_zero, "1");
printf("Struct record1: %x", *record1);
}
当我单独分配record1->a = 16时,我得到“ Struct record1: 10 ”
当我分配record1->a = 16和record1->b =4 时,我得到“ Struct record1:40010 ”(我可以发现它是 Little Endianness,但*我的预期输出仍然是04 10 *(每个短需要两个字节))
当我分配record1->a=16; *记录1->b =4;*记录 1->c.s_addr = 1UL;* strcpy(record1->d, "1"); * 输出仍然是“ Struct record1: 40010 ”(Y 是赋值给 long 和 char[] 没有反映?)
谁能解释这种行为。我想看看结构的内容是如何在内存中分配的。有没有更聪明的方法来实现这一目标?