数据类型
(1)基本数据类型
整型
浮点型
字符型
(2)构造类型
数组
结构体
结构体: 用来处理,现实生活中,更复杂的数据的描述
用来 描述复杂数据的 一种用户自定义的数据类型
一.结构体类型 定义 --- 定义(从无到有) 声明()
struct 结构体名
{
成员列表
};
(1).struct 表示这是一个结构体类型
(2).结构体名 标识符
(3).成员列表 这个结构类型中要描述的具体数据 ,一般都是变量定义的形式
struct student
{
int sno;
char name[20];
int age;
float score;
};
(此时表示 定义了一个 学生信息的结构体类型 数据类型 --- 用户自定义)
变量的初始化 和 赋值
struct student s = {110,"tom",18,98.5};
struct student s[3]={{110,"tom",12,98.2},{111,"jey",13,97.5},{112,"mik",10,99.5}};
引用结构体数据 一般我们是引用到结构体成员 (引用到这种基本类型)
int main(int argc, const char *argv[])
{
struct student s={110,"tom",18,98.5};
printf("sno=%d\n",s.sno);
printf("name=%s\n",s.name);
printf("age=%d\n",s.age);
printf("score=%.1f\n",s.score);
return 0;
}
结构体变量名.结构体成员变量名
s.sno
s.name
s.age
s.score //引用到结构体成员变量
说明:
1. 同一类型的结构体 变量间可以相互赋值
2. 结构体变量赋值,是赋值给结构体成员的
-> //指向结构体成员运算符
结构体类型的指针->结构体成员变量名
void printStuInfo(struct student *s,int len)
{
int i=0;
printf("No\tName\tAge\tScore\n");
printf("------|\t------|\t------|\t------\n");
for(i=0;i<len;++i)
{
printf(" %d\t",(s+i)->sno);
printf("%s\t",(s+i)->name);
printf("%d\t",(s+i)->age);
printf("%.2f\n",s[i].score);
}
}
考点:
结构体的对齐规则: //内存地址的对齐
1.在32位的平台上,默认都是按4字节对齐的。
2.对于成员变量,
各自在自己的自然边界上对齐。
char -- 1字节
short -- 2字节
int -- 4字节
3.如果 成员变量中有比4字节大。
此时 整个结构体 按照4字节对齐。 //32位的平台
4.如果 成员变量中没有有比4字节大。
此时 整个结构体 按照最大的那个成员对齐。
//32位的平台
//如果有超过4字节 ,按照4字节对齐
//如果没有超过4字节的,则按成员变量中最大对齐
----------------------------------------------
//64位的平台 ---- 64位平台 整个结构体对齐, 按成员中最大的对齐
1.结构体成员的对齐 --- 放在自然边界 (偶数位置)
2.结构体整体的对齐 --- 以结构体中最大的成员对齐