概述
- 结构体跟数组完全不一样,许多特性反而跟基本类型一致;
- 声明时,成员以分号结尾,赋值时则以逗号隔开;
- 长度计算,根据内存存储图来思考:
- 成员起始地址为期所占内存的整数倍
- 总占内存数为成员最大基类型(不包括扩展类型)的整数倍
- 所以定义结构体时要考虑成员间的顺序,以便减少无效内存占用
- 结构体变量名就是所有成员的集合,需要其地址的话要用&结构体名
1. 结构体基本语法代码
1 /* 2 * author: tianqiang 3 * date :2022/0518 4 * description: 结构体基本语法 5 * 1)结构体类型声明时,成员结尾为分号; 6 * 2)整体赋值时,成员间以逗号隔开; 7 * 3)编译器会隐式的自动地址对齐 8 * 4)成员的起始地址为其所占内存的整数倍; 9 * 5)总占内存数为成员最大基础类型(不包括扩展类)的整数倍; 10 */ 11 12 #include <stdio.h> 13 14 struct Student { 15 char name[50]; //类型声明的时,成员结尾用分号 16 int score; 17 int num; 18 }; 19 20 typedef struct { 21 char *name; //这里是指针类型,所以所占内存大小不变。 22 double score; 23 int num; 24 } STUDENT; 25 26 static int MONTH = 12; 27 int main () { 28 struct Student tianqiang; 29 struct Student *pStudent; 30 strcpy(tianqiang.name, "qi"); 31 tianqiang.score = 98; 32 tianqiang.num = 3; 33 34 printf("tianqiang.name = %s, tianqiang.score = %d, tianqiang.num = %d \n", tianqiang.name, tianqiang.score, tianqiang.num); 35 pStudent = &tianqiang; 36 //pStudent->name = "jianmei"; 37 pStudent->num = 4; 38 printf("tianqiang.name = %s, tianqiang.score = %d, tianqiang.num = %d \n", tianqiang.name, tianqiang.score, tianqiang.num); 39 printf("pStudent->name = %s, pStudent->score = %d, pStudent->num = %d \n", pStudent->name, pStudent->score, pStudent->num); 40 41 STUDENT zeyu = {"y", 100, 1}; //定义通俗易懂赋值时,中间用逗号隔开,而不是分号 42 printf("zeyu.name = %s, zeyu.score = %f, zeyu.num = %ld \n", zeyu.name, zeyu.score, zeyu.num); 43 44 STUDENT *pZeyu = &zeyu; 45 printf("sizeof(zeyu) = %ld, sizeof(pZeyu) = %ld \n", sizeof(zeyu), sizeof(pZeyu)); 46 printf("sizeof(tianqiang) = %ld, sizeof(pStudent) = %ld \n", sizeof(tianqiang), sizeof(pStudent)); 47 48 printf("sizeof(MONTH) = %d \n", sizeof(MONTH)); 49 return 0; 50 } 51 /* 52 * out put: 53 *tianqiang.name = qi, tianqiang.score = 98, tianqiang.num = 3 54 tianqiang.name = qi, tianqiang.score = 98, tianqiang.num = 4 55 pStudent->name = qi, pStudent->score = 98, pStudent->num = 4 56 zeyu.name = y, zeyu.score = 100.000000, zeyu.num = 1 57 sizeof(zeyu) = 24, sizeof(pZeyu) = 8 58 sizeof(tianqiang) = 60, sizeof(pStudent) = 8 59 sizeof(MONTH) = 4 60 * 61 */