我正在学习如何在C语言中使用struct
,并编写了以下示例:
#include <stdio.h>
#include <stdlib.h>
struct s1{
unsigned short member;
};
int main()
{
struct s1 *s1_ptr = malloc(sizeof(*s1_ptr));
s1_ptr -> member = 10;
printf("Member = %d\n", *s1_ptr); // Member = 10
}
问题:在所有情况下,结构体的指针是否保证是指向其第一个元素的完全相同的指针?在这种特定情况下,它按照我的预期工作,但我不确定是否保证。编译器是否自由地在一开始插入一些填充?
关于结构体类型布局,我能找到的唯一信息是N1570的
第6.2.5节类型
:
但这里没有关于填充的内容。结构体类型描述了一个顺序分配的非空成员对象集(在某些情况下是不完整的数组),每个对象都有一个可选的名称和可能不同的类型。