目录
0.首先有几点是必须要知道的
1.[]与变量结合的优先级高于*、*优先和声明类型结合(在没有括号的情况下)
2.理清楚复杂短句,找到“本质”
3.时刻牢记指针就是地址
中文语言的特性:形容词在前,名词在后
故而:函数指针:本质就是指针:指向函数的指针
指针函数:本质就是函数:本质是一个函数,而该函数的返回值是一个指针
数组指针:本质就是指针:指向数组的指针(详解见:https://blog.csdn.net/Wmll1234567/article/details/87642973)
指针数组:本质就是数组:数组里的每个元素是指针类型
普通函数声明:
int fun(int x,int y);
普通指针:
int * p;
//这里定义了一个指向整型的指针变量,普通普通在他指向的很“普通”,我觉得那也可以仿照函数指针成为整型指针
//但一定记住,整型指针不要以后记着记着就成了类型为整型的指针;这里的整形指的是他指向对象的类型
1.函数指针
int (* fun)(int x,int y);
//这里*和fun 结合;说明这是一个指针,不过这个指针指向一个函数(指针里实际存放的是函数入口地址)
2.指针函数
int * fun(int x,int y);
//这里*和int 结合;说明返回值是一个指针
3.回调函数 (其实就回调函数是函数指针的一种用法)
为什么要存在函数指针、指针函数这么拗口的东西呢?,他们都用在什么场景呢?
- 指针函数
普通函数只能返回一个值,那有时候希望返回一个数组呢?这时候需要指针函数返回数组首地址即可啦
- 函数指针
希望函数作为一个参数传进一个函数里时,就需要函数指针了,因为要传入的是这个函数的入口地址
很多时候,我们都需要调用一个函数,触发另外一个函数(称为回调函数),这时调用函数参数就得定义为函数指针
应用举例:
//ide:vs
#include<stdio.h>
#include<string.h>
#include <stdlib.h>//system头文件
#include <windows.h>
typedef void (*callback_my)(int event_num);
void callback0(int event_num)
{
switch(event_num)
{
case 0:
printf("你好傻\n");
break;
case 1:
printf("你好笨\n");
break;
case 2:
printf("你好聪明\n");
break;
case 3:
printf("你好漂亮\n");
break;
default :
printf("你好丑\n");
break;
}
}
int setup(callback_my cb)
{
int i;
while(1)
{
scanf("%d",&i);
cb(i);
}
}
int main()
{
setup(callback0);
system("pause");
return 0;
}
结果演示: