函数指针
定义
函数指针本质上是指针,它是函数的指针(定义了一个指针变量,变量中存储了函数的地址)。函数都有一个入口地址,所谓指向函数的指针,就是指向函数的入口地址。这里函数名就代表入口地址。
函数的指针存在的意义:
-
让函数多了一种调用方式
-
函数指针可以作为形参,可以形式调用(回调函数)
语法:
返回值类型 (*变量名)(形参列表)
举例:
int (*p)(int a, int b);
函数指针的初始化
①定义的同时赋值
②先定义,后赋值
注意:
1.函数指针指向的函数要和函数指针定义的返回值类型,形参列表对应,否则编译报错2.函数指针是指针,但不能指针运算,如p++等,没有实际意义
3.函数指针作为形参,可以形成回调
4.函数指针作为形参,函数调用时的实参只能是与之对应的函数名,不能带小括号()
5.函数指针的形参列表中的变量名可以省略
指针函数
定义
本质上是函数,这个函数的返回值类型是指针,这个函数称之为指针函数。
语法:
返回值类型 *变量名 (形参列表)
{
函数体;
return 指针变量;
}
举例:
int *get(int a)
{
int *b = &a;
return b;
}
int main()
{
int *a = get(5);
printf("%d\n",*a);
}
注意:
在函数中不要直接返回一个局部变量的地址,因为函数调用完毕后,局部变量会被回收,使得返回的地址就不明确,此时返回的指针就是野指针。
解决方案:
如果非要访问,可以给这个局部变量添加static
可以延长它的生命周期,从而避免野指针(尽量少用,因为内存泄漏)
最后复习一下二维数组访问方式