struct tag { member-list } variable-list;
方法1: 定义结构体stu,此时结构体相当于一个类型,比如int,如需使用此结构体,方法同int.
方法2: 定义结构体stu同时定义需要使用的结构体变量stu1, stu2。如后面再需要定义结构体变量,方法同1. struct stu { char aa; short bb; int cc; }stu1, stu2;
struct stu stu3; 方法3: 定义结构体时,结构体名称缺省,同时定义结构体变量stu1,stu2。但后面不可再定义结构体变量。
提示: 这里不能像上面再定义结构体变量:(以下错误) struct stu3; struct stu stu3;
方法4: 使用typedef定义结构体同时,给stu结构体别名STU,后续定义可不用使用struct stu,直接使用STU即可。
你会发现,其实就是通过关键字typedef,将STU取代了struct stu。 当然,也可以这么用: struct stu stu1; 上面这种定义就失去了typedef的意思,所以不推荐。 方法5: 使用typedef定义结构体时,省掉结构体第一个别名stu,直接在后面加STU,使用方法同上。
方法6: 还有一种符合语法规则,但意义不大的定义方式。 typedef struct stu { char aa; short bb; int cc; };
struct stu stu1; 以上这些定义方式算是语法的知识,如果还不懂,请再次复习一下。 四、结构体大小计算 结构体的大小,我相信很多人都没搞明白。实际编程中也是很多地方都在应用,比如:存储、拷贝结构体时都会牵涉到结构体大小的问题。 1.对比两结构体大小,一样吗? 结构体1:
结构体2: struct stu { char aa; char bb; short cc; }stu2; 结构体计算要遵循字节对齐原则,一般满足三个准则: 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节; 3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节; 对于上面结构体stu1来说,最大字节:2字节,顺序是 char->short->char:
对于上面结构体stu2来说,最大字节:2字节,顺序是 char->char->short:
通过上面两个表格,相信你应该明白了,改成4字节的int,原理一样。 最后,强调一下,学习编程,不能只看书,要多敲代码。 ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ |
|
来自: 西北望msm66g9f > 《培训》