1.结构体整体空间是占用空间最大的成员(的类型)所占字节数的整数倍。
2.结构体的每个成员相对结构体首地址的偏移量(offset)都是最大基本类型成员字节大小的整数倍,如果不是,编译器会自动补齐。
理解结构体大小的计算以及结构体偏移问题是核心,对于有关结构体变量地址的理解如果对指针没有问题的话理解起来还是相对容易的,加油!每一个为梦想而艰辛付出的践行者!
前言
复习C语言结构体,温故而知新!
提示:以下是本篇文章正文内容,下面案例可供参考
一、结构体要注意以下几点
1.只有结构体变量才分配地址,而结构体的定义不分配空间的。
2.结构体变量的声明需要在主函数之上或者主函数中声明,如果在主函数之下会报错。
3.C语言中的结构体不能直接进行强制转换,只有结构体指针才能强制转换。
二、结构体的存储
1.结构体整体空间是占用空间最大的成员(的类型)所占字节数的整数倍。
代码如下(示例):
struct s1
{
char ch1;
int i;//{} {}{}{} {}{}{}{} {} {}{}{}
char ch2;//12
};
struct s2
{
char ch1;
char ch2;//{}{} {}{} {}{}{}{}
int i;//8
};
2.结构体的每个成员相对结构体首地址的偏移量(offset)都是最大基本类型成员字节大小的整数倍,如果不是,编译器会自动补齐。
2.1 偏移量:指的是结构体变量中成员的地址和结构体变量首地址的差,即偏移的字节数。结构体大小等于最后一个成员的偏移量加上它的大小,第一个成员的偏移量为0。
三、结构体初始化
1.在对结构体变量初始化时,要对结构体成员一 一赋值,不能跳过前面成员变量,而直接给后面成员变量赋值,但是可以只赋值前面几个成员变量,对后面未赋值的成员变量,如果是数值型,则自动赋值为0,对于字符型,会自动赋值为NULL,即'\0';
2.指针作为实参,传递给函数的形参,这时候传递的是结构体的地址,形参所指向的地址是结构体变量的地址,这时候进行修改的话是可以修改的。