黑马程序员---学习笔记9:构造类型和结构体

七分热度_HD 2015-08-13 06:13:31
构造类型:
根据已经定义的一个或者多个数据类型用构造的方法定义的。
构造类型有以下几种:
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)再以模数为基数一个变量一个变量的分配内存,如果不足,模数,两个变量可以共同存在一个模数中

...全文
592 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,158

社区成员

发帖
与我相关
我的任务
社区描述
在CSDN学院遇到的问题反馈及对学院的改进建议等。
社区管理员
  • 软件培训社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧