指针函数:顾名思义,指针的函数,虽然叫的这么高大上,然而本质上还是一个函数
如果函数的返回值,是一个指针的时候,就叫指针函数。
定义语法:
类型 * 函数名(参数列表){
函数体;
}
说到这里,要说一个概念:
内存中有一块区域:栈区,栈区里面放的是局部变量
它有一个特点:出了作用域,作用域内的任何东西都会回收,包括指针函数返回的局部变量;当然全局变量可以用,不过要绕一圈。。
栈区的对面是常量区,专门存储常量的。
然而大家都知道,语言的常量不能改。所以。。。这个概念目前为止,似乎还只是鸡肋。。
注意:用指针函数的话,目前没什么用,C语言中的数据类型只要是局部的都是存在栈里面的。
用处的话:只能返回值或字符串常量地址给全局变量,还可以返回静态变量的地址。。。
了解就好
————————华丽丽的分割线————————
函数指针
函数的指针,本质上一个指针。。。
中心思想:指向函数的指针,就是一个函数指针;
我们可以定义一个指针变量保存函数的地址,那么这样的指针变量就是函数指针
例:指针是这样定义的;
int num = 10;
int *p = #
而函数指针定义语法:
返回值类型 (*指针变量)(参数列表);
例:void (*pTest)(); //变量名:pTest 这个指针指向的是无返回值也无参数的函数类型
void (*pTest2)(int);//变量名:pTest2 这个指向的是无返回值有1个int类型参数的函数。(当然,有几个返回值都可以,参照函数的概念;)
声明方法:直接复制函数头,把大括号去掉,把函数名用一个小括号括起来,函数名前面加一个*,函数名重新改成变量名
指针变量赋值:
语法:
指针变量名 = 函数名;
例: pTest = test;
因为函数名本身就是一个指向自己函数的地址。。
函数名后面千万不要加()!
函数名后面千万不要加()!
函数名后面千万不要加()!
重要的事情说三遍!!!
在声明的时候初始化:
返回值类型(*指针变量名)(参数列表)= 函数名;
例:void (*pTest)() = test;
函数指针的使用:
1.指针变量名(参数列表);
pTest();
pTest2(90);
2.(*指针变量名)(参数列表);
例: (*pTest)();
(*pTest2)(90);