构造类型:
根据已经定义的一个或者多个数据类型用构造的方法定义的。
构造类型有以下几种:
1)数组类型
2)结构体类型
3)公用体(联合)类型
结构是一种构造类型,由若干成员组成,每一个成员可以是一个基本数据类型或者又是一个构造类型。
定义结构体的方法:
struct 结构名{
成员列表
};(最后的分号不能省)
struct Car {
char *color;
int lunzi;
int speed;
};
结构体的定义方法:
1)先定义结构,再说明结构变量
struct Student{
int Sno;
char Name[21];
int Age;
float Score;
};
注意:
(1)结构体定义完成以后,计算机并不会给结构体分配内存空间。
(2)会在定义结构体变量后,分配存储空间。
结构体变量定义格式:
struct 结构体名 结构体变量名
struct Student Stu;这句话表示,定义一个Student 结构体类型的变量,变量 的名称是Stu。
Stu可以存放学生的学号,姓名,年龄,成绩
2)定义结构体的同时,定义结构变量。
格式:
struct 结构体名
{
}结构体变量1,结构体变量2。。。;
3)使用匿名结构体,定义结构体变量
格式:
struct {
}结构体变量1,结构体变量2,结构体变量3;
结构体变量中的成员访问:
结构体变量名.成员名
结构体变量初始化:
1)先定义变量然后初始化
struct Student{
int Sno;
char Name[21];
int Age;
float Score;
};
struct Student Stu1;
Stu1.Sno=38;
Stu1.Age=18;
Stu1.Score=59.99f;
strcpy(stu1.name,"张三丰");
1)stu1.name占用多少字节?
printf("Stu1.name %ld\n",sizeof(Stu1.name));
21个字节,因为数组分配了21个字节
2)stu1.name的字符串长度是多少?
printf("Stu1.name 长度 %ld",strlen(stu1.name));
9个
汉字编码问题:
1)UTF-8 Xcode中使用的汉字编码格式,国际通用格式 占3个字节
2)GB2312 GBK 国标 一个汉字占2个字节
2)定义结构体变量(注意:这里说的是变量而不是结构体)的同时初始化
struct Student Stu2={8,“张丹峰”,18,49.99f};
3)定义结构体变量的同时,指定元素初始化
struct Student Stu3={.name="Lady Gaga"};
结构体存储的原理:
结构体占用的内存空间,是每个成员占用的字节数之和(考虑对齐问题)
对齐的意义:
为了简化计算机处理器和内存之间传输系统的设计,提升读取数据的速度,在读取时都以n个字节的倍数进行读取,这样对于字节数不同的数据省去了读取时判断的操作。
结构体对齐的含义:
1)结构体总长度
2)结构体各数据成员的内存对齐,也就是各个成员相对于结构体起始地址的位置
结构体大小的计算方法与步骤:
1)先找对齐模数
对齐模式是结构体中,基本数据类型占用字节最大的那个
2)再以模数为基数一个变量一个变量的分配内存,如果不足,模数,两个变量可以共同存在一个模数中
|
|