c语言学习之基础知识点介绍(十五):函数的指针

时间:2023-03-09 01:01:47
c语言学习之基础知识点介绍(十五):函数的指针

一、函数的指针的介绍

/*

 函数指针:
函数的指针,本质上一个指针 指向函数的指针,就是一个函数指针。 回忆:我们写的源代码编译成二进制的指令集,一串交给CPU执行的指令 先存在内存里面,然后CPU读取内存里的指令,既然存到内存里面,一定有一个地址 所以,我们可以定义一个指针变量保存函数的地址,那么这样的指针变量就是函数指针。 函数指针定义语法:
返回值类型 (*指针变量)(参数列表); 例: void (*pTest)(); //变量名:pTest 这个指针指向的是无返回值无参数的函数类型。 void (*pTest2)(int);//变量名:pTest2 这个指向的是无返回值有1个int类型参数的函数。 tips:直接复制函数头,把大括号去掉,把函数名用一个小括号括起来,函数名前面加一个*,函数名重新改成变量名。 指针变量赋值: 语法:
指针变量名 = 函数名; 例: pTest = test; 因为函数名本身就是一个指向自己函数的地址 注意:函数名后面千万不要加()。 在声明的时候初始化 返回值类型 (*指针变量名)(参数列表) = 函数名; 例:void (*pTest)() = test; 函数指针的使用:
1.指针变量名(参数列表);
pTest();
pTest2(90); 2.(*指针变量名)(参数列表); 例: (*pTest)();
(*pTest2)(90);
*/

二、函数指针的应用

1、把函数当做参数传递。

2、把函数当做返回值。

/*
类似于支付宝问题,银行不可能把操作银行卡的权限交给支付宝,所以,当用户选择银行后,需要把该调用的银行付款方法传递给支付宝,然后支付宝再去调用(只是一个比喻,现实中支付宝不会这样)。具体的代码编写,可以自己动手,我就不传了。
*/

三、结构体指针的使用

/*

 结构体的变量也要开辟空间,所以也会有一个内存首地址

 那么我们把这个结构体变量的内存首地址保存起来,就是结构体指针

 定义的语法:

        类型 *指针变量名;

        struct 结构体名 *指针变量名;

 结构体指针的赋值:
指针变量名 = 地址;
指针变量名 = &结构体变量;
例如:Person p = {"刘德华",88};
Person *ppt;
ppt = &p; 声明的时候初始化
Person p = {"刘德华",88};
Person *ppt = &p; 通过结构体指针访问结构体变量的成员: 1.使用*来访问
语法: (*指针变量名).成员名;
(*ppt).age; 2.使用->来访问
语法: 指针变量名->成员名;
ppt->age; 赋值:
1.使用*来访问
语法: (*指针变量名).成员名 = 数据;
(*ppt).age = 16; 2.使用->来访问
语法: 指针变量名->成员名 = 数据;
ppt->age = 16; */ #include <stdio.h> typedef struct{ char name[];
int age; }Person; int main(int argc, const char * argv[]) { Person p = {"刘德华",}; Person *ppt; ppt = &p; //*ppt; //*ppt 就等同于p // printf("age=%d\n",(*ppt).age); printf("age=%d\n",ppt->age);// (*ppt).age = ; printf("age=%d\n",p.age);// ppt->age = ;
printf("age=%d\n",p.age);// return ;
}