黑马程序员技术交流社区

标题: 学习笔记9:构造类型和结构体 [打印本页]

作者: 新生heima    时间: 2015-8-13 23:26
标题: 学习笔记9:构造类型和结构体
构造类型:
根据已经定义的一个或者多个数据类型用构造的方法定义的。
构造类型有以下几种:
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)再以模数为基数一个变量一个变量的分配内存,如果不足,模数,两个变量可以共同存在一个模数中

作者: WPeng    时间: 2015-8-13 23:58
很好学习了
作者: 新生heima    时间: 2015-8-14 17:53
WPeng 发表于 2015-8-13 23:58
很好学习了

谢谢支持!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2