您的位置:首页 > 职场人生

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

2015-08-20 13:02 399 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
——-

构造类型:

根据已经定义的一个或者多个数据类型用构造的方法定义的。

构造类型有以下几种:

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)再以模数为基数一个变量一个变量的分配内存,如果不足,模数,两个变量可以共同存在一个模数中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: