013-结构体-C语言笔记

学习目录

1.【掌握】返回指针的函数

2.【掌握】指向函数的指针

3.【掌握】结构体的声明

4.【掌握】结构体与数组

5.【掌握】结构体与指针

6.【掌握】结构体的嵌套

7.【掌握】结构体与函数

一、返回指针的函数

指针作为函数的返回值

指针是可以作为函数的返回值的,不能返回局部变量的指针,因为当函数执行结束后指针变量就释放了。如果我们真的需要返回一个指针变量,那就要保证我们的函数执行完毕之后,指针指向的变量仍然存储在内存之中。那我们可以将变量创建在堆空间中,使用malloc或者calloc申请空间。或者直接声明为全局变量或者用static修饰的局部变量。

如果函数需要返回一个字符串,我们可以返回(char *)类型字符串,不要使用字符数组,因为字符数组在函数执行结束后,就释放了。而使用(char *)声明的字符串是存储在数据段的,直到程序执行结束才会释放。

二、指向函数的指针

程序在运行的时候,函数是存储在内存(代码段)之中的,存储函数的空间肯定也是有地址的,所以我们可以用指针指向函数。

语法:返回值类型 (*指针名)([参数列表]);

注意:

1.函数的地址就是函数名。

2.指向函数的指针变量,本质上还是一个变量,那么我们就可以声明、赋值给另外一个同类型的指针变量使用。

无参无返回值

有参有返回值

应用场景:多种方式对字符串数组进行排序

三、结构体的声明

在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生信息这个整体可以由姓名、年龄、身高等数据构成,这些数据都具有不同的数据类型,姓名可以是字符指针类型,年龄可以是整型,身高可以是浮点型。C语言提供了一种构造类型来解决这个问题,由程序员自己声明多个数据类型组成一个整体当做一种新的数据类型,这个玩意就是结构体。结构体里的声明的多个数据类型变量叫做结构体的成员。

声明结构体类型语法:

struct 类型名 {

    数据类型1 成员名1;

    数据类型2 成员名2;

    ..........

};

声明结构体变量语法:struct 类型名 变量名;

为结构体变量中的成员赋值

使用结构体注意:

1.这个新声明的结构体也是一个数据类型,由程序员自己声明的新类型,所以可以声明这个结构体类型的变量。

2.定义在大括号之中的变量,叫新类型的成员。必须要先声明结构体类型,再声明结构体变量。

3.结构体类型名首字母大写,并且结构体末尾需要加分号,

4.声明一个结构体变量没有初始化,成员的值是垃圾值,如果声明的同时初始化了部分,其他成员初始化为0。

5.相同类型的结构体变量是可以相互赋值的,赋值是将原结构体中的每一个成员的值挨个拷贝给目标结构体变量。

6.结构体变量名,直接代表整个结构体变量。在外面学习到的所有数据类型中,只有数组名、函数名才代表他们的地址。其他都是代表变量本身

四、结构体与数组

语法:struct 结构体类型名 数组名[长度];

五、结构体与指针

结构体变量也是一个变量,那么这个结构体变量一定是有内存地址的,所以我们就可以搞个指针指向这个结构体变量。然后我们就可以通过指针间接操作结构体变量。

语法:struct 结构体类型名 *指针名;

六、结构体的嵌套

我们在为结构体写成员的时候,发现某个成员也是一个需要多个数据组成一个整体的数据,这个时候我们就可以使用结构体嵌套。在结构体内声明另一个结构体类型的变量作为成员来使用。

七、结构体与函数

结构体作为函数的参数

结构体作为函数的返回值

六阿哥

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: