day15-c函数,结构体

day15-c函数,结构体

一、复习


1、指针函数:

​ 本质:是一个函数,指针函数的返回值是一个地址

1
2
3
4
5
<数据类型>* 函数名(形式参数)
{
代码模块;
return 地址量; //合法地址
}

2、函数指针:

​ 本质:是一个指针,指向一个函数的首地址

1
2
3
4
5
6
7
8
9
10
11
12
定义的一般形式:
<数据类型> (*函数指针变量名)(参数列表);

例:
int (*p)(int x, int y);
数据类型:跟指针指向的函数的数据类型一致
参数列表:跟指针指向的函数的参数列表一致

int add(int x, int y);
p = add; //将函数add的首地址赋值给函数指针变量p
(*p)(2, 3); //调用add函数传入实参为2和3


二、函数

1、函数指针数组

​ 本质:是一个数组, 存放的全部都是函数指针类型的数据

1
2
3
4
5
6
7
8
定义的一般形式:
<数据类型> (*函数指针数组名[元素个数])(参数列表);
例:
int add(int x, int y);
int sub(int x, int y);
int (*arr[2])(int x, int y) = {add, sub};
//定义了一个名为arr的函数指针数组,数组中最多可以存放两个 int(* )(int, int)类型的数据

2、递归函数

​ 练习:计算一个正整数的阶乘,用函数封装功能

​ 概念:在一个函数中直接或者间接调用函数本身

​ 递归函数的特点:

​ 1:递推公式

​ 2:设置有退出条件

​ 优点:能够让代码整体更加简洁

​ 缺点:需要消耗大量系统资源

​ 必须要设置退出条件

三、结构体

​ 跟数组一样,是用户自定义的一种数据类型

​ 结构体中可以存放多个不同数据类型的数据

1、结构体的定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
一般形式:
struct 结构体名
{
数据类型 成员名1;
数据类型 成员名2;
数据类型 成员名3;
......
};

例:
struct stu
{
char name[50];
int age;
char sex;
double height;
char address[50];
char hobby[50];
};

2、结构体变量

1
2
3
4
5
6
一般形式:
struct 结构体名 结构体变量名;
例:
struct stu stu1;
struct stu stu2;

3、访问结构体成员

1
2
3
一般形式:
结构体变量名.成员名;
stu1.age = 18; //访问1号学生stu1中的年龄,赋值为18;

4、结构体变量的初始化

1
2
3
struct 结构体名 结构体变量名 = {依次给每一个成员赋值};  //成员之间用逗号隔开

struct stu stu2 = {"张三", 19, 'm', 182.1, "成都", "sing and dance"};

5、结构体指针

1
2
3
4
5
6
7
int a = 2;
int *p = &a;

struct stu stu1;
struct stu *p = &stu1;
(*p).name //stu1中的name成员
p->name == (*p).name
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020-2024 nakano-mahiro
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信