梓益C语言学习笔记之结构体——共用体-枚举

梓益C语言学习笔记之结构体——共用体-枚举

有人说,我们需要将不同类型的数据组合成一个整体,于是,就有了结构体

一、结构体的概念:

一种或多种基本类型或构造类型的数据的集合。

二、定义方法:

先定义结构体类型,再去定义结构体变量

结构,结构体类型名{

成员列表

};

如:

struct stu {

int num;

char[20]名称;

字符性;

};

struct斯图,露西,鲍勃,李雷;//定义了三个结构体stu类型的变量

每个变量都有三个成员,分别是num的名字,性


通常咱们将一个结构体类型重新起个类型名,用新的类型名替代原先的类型

* *最常用的定义结构体的方法是:

typedef struct stu {

int num;

char[20]名称;

字符性;

} stu;

stu露西。

三,初始化及使用:

typedef struct stu {

int num;

char[20]名称;

字符性;

} stu;

stu露西={101年“lucy", & # 39; f # 39;};

stu鲍勃;

bob.num=101;//鲍勃是个结构体变量,但是鲍勃。num是个int类型的变量

bob.name是个字符数组,是个字符数组的名字,代表字符数组的地址,是个常量

bob.name=癰ob";//是不可行,是个常量

拷贝字符串(bob.name,“bob");

四、结构体数组

结构体数组是个数组,由若干个相同类型的结构体变量构成的集合

1,结构体数组的定义方法:

struct stu {

int num;

char[20]名称;

字符性;

};

struct stu edu[3];//定义了一个struct stu类型的结构体数组edu,

这个数组有3个元素分别是edu [0], edu [1], edu [2]

,,,,可以这样赋值:斯图edu [3]={

{101年“Lucy" 78},

{102年“Bob", 59.5},

{103年“Tom" 85}

};

2,数组元素的使用

edu [0]。num=101;//用101给edu数组的第0个结构体变量的num赋值

strcpy(edu[1].name,"lucy");

五、结构体指针

即结构体的地址,结构体变量存放内存中,也有起始地址

定义一个变量来存放这个地址,那这个变量就是结构体指针变量。

1、结构体指针变量的定义方法:

struct stu{

int num;

char name[20];

};

struct stu * p;//定义了一个struct stu *类型的指针变量,变量名是p,p占4个字节,用来保存结构体变量的地址编号


使用:struct stu boy;

p=&boy;

访问结构体变量的成员方法:

boy.num=101;//可以,通过结构体变量名.成员名

(*p).num=101;//可以,*p相当于p指向的变量boy

p->num=101;//可以,指针->成员名 

通过结构体指针来引用指针指向的结构体的成员,前提是指针必须先指向一个结构体变量。


六、结构体内存分配

为什么要有字节对齐?

用空间来换时间,提高cpu读取数据的效率

结构体变量大小是所有成员之和


规则1:结构体分配内存时哪个基本类型的成员占字节数多,就以它的大小为单位开辟内存,

在gcc中出现了double类型的,例外

1:成员中只有char型数据 ,以1字节为单位开辟内存。

2:成员中出现了short int 没有更大字节数的基本类型数据以2字节为单位开辟内存

3、出现了int float 没有更大字节的基本类型数据的时候以4字节为单位开辟内存。

4、出现了double类型的数据

情况1:

在vc里,以8字节为单位开辟内存。

情况2:

在gcc里,以4字节为单位开辟内存。

无论是那种环境,double型变量,占8字节。

注意:

如果在结构体中出现了数组,数组可以看成多个变量的集合。

如果出现指针的话,没有占字节数更大的类型的,以4字节为单位开辟内存。

在内存中存储结构体成员的时候,按定义的结构体成员的顺序存储。

例1:struct stu{

char sex;

int age;

}lucy;

lucy的大小是4的倍数。

规则2:字节对齐

1:char 1字节对齐 ,即存放char型的变量,内存单元的编号是1的倍数即可。

2:short int 2字节对齐 ,即存放short int 型的变量,起始内存单元的编号是2的倍数即可。

3:int 4字节对齐 ,即存放int 型的变量,起始内存单元的编号是4的倍数即可

4:long int 在32位平台下,4字节对齐 ,即存放long int 型的变量,起始内存单元的编号是4的倍数即可

5:float 4字节对齐 ,即存放float 型的变量,起始内存单元的编号是4的倍数即可

梓益C语言学习笔记之结构体——共用体-枚举