C语言 day16
结构体
typedef关键字
给已有类型取个别名
使用步骤:
- 先用已有类型定义一个变量
- 用别名替换变量名
- 在整个表达式前添加
typedef
案例1:给int取个别名
1 |
|
运行结果:
案例3:给指针取个别名
1 |
|
运行结果:
案例4:给函数指针取个别名
1 |
|
运行结果:
给结构体类型取个别名
案例5:
1 |
|
运行结果:
结构体指针
案例6:
1 |
|
运行结果:
案例7:从堆区给结构体申请空间
1 |
|
运行结果:
结构体指针作为函数的参数
一般指针作为函数参数的目的就函数需要修改指针所指向空间的内容
案例8:
1 |
|
运行结果:
案例9:
但是对于结构体无论是否函数需要修改结构体变量的值,我们一般参数都传入指针
原因:在32位系统下,指针永远只占4字节,在函数调用时,函数会为形参的指针开辟4字节,但是如果形参不是指针而是一个结构体变量,如果传进来的结构体变量实参非常大,比如200字节,这样就会占用比较大的内存
1 |
|
运行结果:
从堆区申请一个结构体数组(分函数实现)
案例10:
1 |
|
运行结果:
案例10的一个错误:
找了两个小时,人都自闭了
- 问:上图中函数存在什么问题?
- 形参为
STU *p
,但是我们是要赋值给STU *arr
,我们传参时传的是arr,我们应该传arr的地址才行,也就是形参是二级指针才行STU **p
所以my_apply
要改成这样才行
这时传入的就不是arr了是&arr
因此,给指针变量赋值时,一般用的返回值,不然要传入二级指针比较麻烦
修改好的完整代码:
1 |
|