c语言 8 结构体

 结构体

结构体,结构体是将多个基本类型组合起来,组建成一个新的自定义类型。

C/C++中,存在一些基本类型,char/int/short,,,,但 他们不够用,不足以应对更多的现实问题,于是将一些基本类型组合起来,形成一个新的自定义类型,就是结构体

1.1 

1.1肯定是如何创建一个结构体了,创建出来,我们再学习如何使用它。

struct 

c语言 8 结构体

 

2 基本用法

2.1 初始化

注意花括号末尾加分号结束

各个成员初始值要与该成员类型匹配

各个初始值以逗号分开,最后一个成员后边不需要加逗号

初始化顺序与成员变量顺序一致

初始化的时候要注意,最好每个结构体成员初始化的时候用花括号把初始化值括起来

举个初始化出偏差的栗子

c语言 8 结构体

这个,初始化的时候,没有加花括号,结构体第一个成员是一个名为name的int型数组,这个时候就直接把三个元素都读取到name数组中去了

下边是个恰当点的写法

c语言 8 结构体

加了花括号,就不怕它识别错误了c语言 8 结构体

3 定义结构体数组

前边学习了整型数组,char型数组,字符串数组

作为一种变量类型,同样可以定义结构体数组的

结构体数组,  它是一个数组,数组成员类型是结构体

举个例子

c语言 8 结构体

 

4 结构体的内存视图

  照抄书上的话, 结构体就是将多个基本类型组合起来,从内存视图来看,一个结构体变量在内存里相当于多个基本类型变量的组合。

4.1 结构体成员

就是结构体里头定义的各个成员

 

4.2 对齐和填充

这里讲的是内存对齐

为什么要求内存对齐,根据cpu指令要求的,只能在对齐的地址上存取,属于指令集的语法要求,但不是所有cpu都如此限制。

内存对齐就是,依照最大类型的结构体成员类型,比如最大结构体成员是int  就是int 4    内存地址能被4(类型最大成员的类型大小)

简单。

5 其他用法,

5.1 结构体的赋值,

这个简单

int a=29;

int b;

b=a;   //  把a的值赋给a; 

struct  kisss;

{
嘟嘟嘟

};

kiss a={ 嘟嘟嘟嘟}‘

kiss  b;

b=a;   //  把结构体类型a的变量赋给b

 

5.2 结构体指针

栗子

 

6 结构体特殊写法

可以只定义一个结构体变量,并不为这个结构体定义一个类型名字,

代码这样

c语言 8 结构体

6.2 可以在函数内部定义一个结构体,但这样定义的结构体就只在函数内部有效。

一般来说,都定义在函数外边,整成全局。因为struct语法的初衷是定义一个被多出使用的自定义类型。

6.3命名规则,和前边一样,数字字母下划线嘟嘟嘟U度。’

 

7  传值和传址

这个很重要,

比如下边

int a=20;

int b ;

要把a的值赋给b   可以直接赋值

这样的  b=a;  传值得方式  这就是,

然后是传址的方式

int a=20;

int* b=&a;

  相对来说传址更加高效,因为内存中空间很小,传值需要把变量整个值都挪一下,传址只需要把地址交出去,需要的时候按照地址去访问就好了。就好比在厕所六号坑,算了 举个正经点的栗子。

  比如,你们宿舍有个打印机,隔壁楼的兄弟需要用,你直接把打印机给他抗过去,这就是传值,

把你们宿舍门牌号给隔壁兄弟,他需要的时候自己去你宿舍用,这就是传址

这个比喻大概意思对了,但不贴切,

 

然后结束 下一个