我看傻了,所以整理一下。
指针函数类型标识符* 函数名(参数表);
举例:int* fx(int x,int y);
解释:
第一ta是个函数
第二指针函数的返回的是地址,ps这边没读懂?来看一个例子。
#includeint* fun(int *a) { return a; } int main(int argc, char **argv) { int a = 3; printf("%d", *(fun(&a))); return 0; }
感觉没什么作用,指针函数,代表一个函数的返回值是指针,所以void*返回值类型为void类型的地址值。
函数指针实际我理解,可能指向变量的指针变量和指向函数的指针变量,在定义上是不同的。
- int(*p)(int, int);
“定义了一个指针变量 p,该指针变量可以指向返回值类型为 int 型,且有两个整型参数的函数。p 的类型为 int(*)(int,int)。 ”
这个语句就定义了一个指向函数的指针变量 p。首先它是一个指针变量,所以要有一个“*”,即(*p);其次前面的 int 表示这个指针变量可以指向返回值类型为 int 型的函数;后面括号中的两个 int 表示这个指针变量可以指向有两个参数且都是 int 型的函数。
函数返回值类型 (* 指针变量名) (函数参数列表);
函数返回值类型:表示该指针变量可以指向具体什么返回值类型的函数;//返回值类型与返回值密切相关。
函数参数列表:表示该指针变量可以指向具有什么参数列表的函数。
区分:
指向变量的指针变量。int* p
指向函数的指针变量。int(*p)(int,int)
int func(int x);//声明一个函数
int(*p)(int x);//定义一个函数指针
p=func; //将func函数的首地址赋给指针变量p
#includeint MAX(int a,int b); int main(void) { int a,b,c; scanf("%d%d",&a,&b); int (*compare)(int a,int b); compare=MAX;//MAX这么用没问题吗,函数名就是地址 c=compare(a,b); printf("%d",c); return 0; } int MAX(int a,int b) { int z; z=a>b?a:b;// return z; }
其中
comepare=MAX;//第一种取值方式 compare=&MAX;//第二种取值方式 //MAX是一个函数标识符,他的名字就是他的地址,如果是函数调用,
其中中>>叠词警告
c=compare(a,b);//第一种书写方式 c=(*compare)(a,b);//第二种书写方式



