C语言指针函数和函数指针

我看傻了,所以整理一下。

指针函数

类型标识符*  函数名(参数表);

举例:int* fx(int x,int y);

 解释:

第一ta是个函数

第二指针函数的返回的是地址,ps这边没读懂?来看一个例子。

#include   
  
int* fun(int *a)  
{  
    return a;  
}  
  
int main(int argc, char **argv)  
{  
    int a = 3;  
    printf("%d", *(fun(&a)));  
    return 0;  
}  

感觉没什么作用,指针函数,代表一个函数的返回值是指针,所以void*返回值类型为void类型的地址值。

函数指针

实际可以这样理解,指向变量的指针变量(例:int *p)和指向函数的指针变量,在定义上是不同的。//

  1. int(*pfunction)(int, int);//

“定义了一个指针变量 pfunction,该指针变量可以指向返回值类型为 int 型(关键一),且有两个整型参数的函数(关键二)。pfunction 的类型为 int(*)(int,int)。 ” 

这个语句就定义了一个指向函数的指针变量 pfunction。首先它是一个指针变量,所以要有一个“*”,即(*p);其次前面的 int 表示这个指针变量可以指向返回值类型为 int 型的函数;后面括号中的两个 int 表示这个指针变量可以指向有两个参数且都是 int 型的函数。 

 函数返回值类型 (* 指针变量名) (函数参数列表);

函数返回值类型:表示该指针变量可以指向具体什么返回值类型的函数;//返回值类型与返回值密切相关。

函数参数列表:表示该指针变量可以指向具有什么参数列表的函数。

区分:

指向变量的指针变量。int* p

指向函数的指针变量。int(*p)(int,int)

int func(int x);//声明一个函数

int(*p)(int x);//定义一个函数指针

p=func; //将func函数的首地址赋给指针变量p

#include   
int 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);//第二种书写方式

这是函数指针比较特殊的情况,也使函数指针变的异常好用。

总结:

1.与指针函数不同,函数指针 的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针。

2.指针函数: 它的本质是一个函数,不过它的返回值是一个指针。

3.重点是后面两个。

参考总结:

1.指针函数和函数指针_禹鼎侯的博客-CSDN博客_指针函数和函数指针

你可能感兴趣的:(语音IC,c语言,开发语言,后端)