考虑用字符串和 int 作为元素填充的结构的大小

问题描述 投票:0回答:1

我想知道下面的结构在内存中是如何存储的。
给定的结构尺寸通过使用

sizeof()
显示为 28。我想知道为什么会这样?

typedef struct {
    char a[10];
    int c;
    char b[10];
}example4;

printf("%ld\n", sizeof(example4));

我已经了解填充,但不知道它如何应用于不同长度的字符串。 我使用以下 printf 来知道内存地址

printf("%p %p %p %p %p\n", (void*)&(example4.a), (void*)&(example4.b), (void*)&(example4.c), (void*)&(example4.a[0]), (void*)&(example4.b[0]));

但是没有成功。

c struct padding sizeof
1个回答
0
投票

您会收到编译器错误,因为为了打印变量的地址,您需要一个具体的实例(并且

example4
是类型,而不是实例):

example4 ex4;
printf("%p %p %p %p %p\n", 
                  (void*)&(ex4.a), 
                  (void*)&(ex4.b), 
                  (void*)&(ex4.c), 
                  (void*)&(ex4.a[0]), 
                  (void*)&(ex4.b[0]));

另一个问题是

printf
的正确
size_t
格式说明符是
"%zu"
:

printf("%zu\n", sizeof(example4));
© www.soinside.com 2019 - 2024. All rights reserved.