在学习完数组指针之后,再学习函数指针的的时候,发现函数指针和数组指针之间有着很多的共同点
数组指针 -指向数组的指针就是数组指针 -取地址数组名赋给一个数组得到数组指针
函数指针 -指向函数的指针就是函数指针
用一个函数简单说明函数指针的传参
int Add(int x, int y)
{
return x + y;
}
int main()
{
/*int a = 10;
int* pa = &a;
*pa = 20;
printf("%d\n", *pa);*/
int arr[5] = { 0 };
//&取地址数组名 -取出的数组的地址
int(*p)[5] = &arr;//数组指针
//函数名就是函数的地址
//&函数名 -取出的是函数的地址吗?
//成功获得了函数的地址
//每一个函数都有自己的地址
/*printf("%p\n", &Add);
printf("%p\n", Add);*/
//对于函数来说 &函数名和函数名都是函数的地址
int (*pf)(int, int) = &Add;
//通过函数的地址就可以找到函数
// 对于指针函数进行解引用就可以使用这个函数
//int ret = (*pf)(2, 3); -标准写法 *便于理解
int ret = pf(2, 3);
//int ret = Add(2, 3);
printf("%d\n", ret);
//函数的参数类型int,int
}
1.取函数的地址与取数组的地址相同 &函数名
2.每一个函数都有自己的地址
3.对于函数来说 &函数名和函数名都是函数的地址
4.通过函数的地址就可以找到这个函数,对这个地址进行解引用就可以使用这个函数
5.int (*pf)(int,int)=&Add; //函数的参数类型要写,名字可写可不写(int x,int y)
6.对这个函数指针的时候 *号可写可不写 (*pf)是标准写法 但是如果写上* 就必须要加上括号,因为加了括号之后才是对这个函数的地址进行解引用,如果没有括号将会对函数返回值进行解引用,发生这个的原因是&函数名和直接使用函数名都是获得这个函数的地址