函数指针
1.引出
首先要了解下指针是一个地址:
看一下如题
void main()
{
char a[] = "123";
char b[] = "123";
const char c[] = "123";
const char d[] = "123";
const char* p1 = "123";
const char* p2 = "123";
const char* const p3 = "123";
const char* const p4 = "123";
if (a == b)
cout << "a == b" << endl;
if (a == c)
cout << "a == c" << endl;
if (c == d)
cout << "c == d" << endl;
if (p1 == p2)
cout << "p1 == p2" << endl;
if (p3 == p4)
cout << "p3 == p4" << endl;
if (p1 == p3)
cout << "p1 == p3" << endl;
}
如图,数组a和b是数组的首地址,所以a、b、c、d都不相同
赋给指针p和q的字符串“123”会被分配到字符创常量区,而指针p和q分别都有一个地址,而这两个地址指向这个字符串常量区,所以p1、p2、p3、p4相同
2.右左法则(往右看一个,再向左看一个,直到没有)
int (*p)[4]--- 数组指针--指向数组的指针
int *q[4];---指针数组 --存储指针的数组
int *(*p2[3])(int)-- 指针函数指针数组
int *p3(int n) -- 指针函数 返回值为指针的函数
int (*p4)(int,int)--- 函数指针 指向函数的指针
例如代码第三个例子:
1.首先找到变量名p2
2.往右看到“[]”,所以是数组(数组)
3.再往p2左边看是*,所以是指针(指针数组)
4.再往右看(int),所以是函数(函数指针数组)
5.再往左看是*,所以是指针(指针函数指针数组)
3.函数指针特点
函数名–代表函数的入口地址
1.指针指向函数,由指针调用函数
2.函数指针作为另外一个函数的参数
3.函数指针作为另外一个函数的返回值