结构体的定义
“结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或
结构体的定义方式:
#include <stdio.h> #define com struct Computer int main(int argc, const char * argv[]) { //第一种方法定义结构体变量 struct Student//结构体名称一般大写 { int age; char name[20]; char sex; float score; }; struct Student stu1; //第二种方法 struct Cars { int speed; char pinpai[20]; float weight; }benchi;//直接在定义结构体的同时定义结构体变量 //第三种方法 struct//定义匿名结构体 { int pages; char *name; }sanguoyanyi; //用宏定义 struct Computer { char *pinpai; int yingpan; }; com lianxiang; return 0; }
结构体单个成员初始化
#include <stdio.h> #include <string.h> int main(int argc, const char * argv[]) { struct Student//定义一个结构体 { int age; char name[20]; float score; }; struct Student stu1;//定义一个结构体变量 stu1.age=23; //stu1.name="陈擎霄";//这样赋值是错误的,因为stu1.name 是数组名,不能直接赋值 strcpy(stu1.name, "陈擎霄"); //通过这个函数赋值,首先得引入头文件,string.h.这个函数的 //作用是把后面的字符赋值给前面的指针(数组名) printf("%s",stu1.name); struct Student cqx={.name="陈擎霄"};//可以通过.name这种方式赋值 printf("%s",cqx.name); return 0; }
结构体全部初始化
#include <stdio.h> int main(int argc, const char * argv[]) { //1.先定义结构体,再初始化 struct Student//定义一个结构体 { int age; char name[20]; float score; }; struct Student stu1; stu1=(struct Student){23,"陈擎霄",99};//需要强制转换成struct Students //2.定义结构体的同时进行初始化 struct Cars { int speed; char pinpai[20]; float weight; }benchi={300,"奔驰",2000.0}; struct Cars baoma={290,"宝马",1900.0};//3.定义结构体变量的同时进行初始化 struct Cars aodi=baoma;//通过已经初始化的结构体变量赋值给另一个变量,这是值传递 printf("1车的品牌是%s,最大速度是%d,重量是%.2f ",benchi.pinpai,benchi.speed,benchi.weight); printf("2车的品牌是%s,最大速度是%d,重量是%.2f ",baoma.pinpai,baoma.speed,baoma.weight); printf("3车的品牌是%s,最大速度是%d,重量是%.2f ",aodi.pinpai,aodi.speed,aodi.weight); return 0; }
结构体存储原理
结构体所占的额内存空间是每个成员占用的字节数之和(但是要考虑对齐问题)
对齐模数:结构体里变量数据类型所占最大的空间数
struct Student//定义一个结构体 { int age; char name[20]; float score; };
这个结构体的模数就是float所占字节数,即为8,整个结构体所占空间为,16