Loading

指针函数和函数指针

指针函数和函数指针

指针函数

定义

指针函数,简单的来说,就是一个返回值为指针的函数,其本质是一个函数,而该函数的返回值是一个指针。

声明格式:类型标识符 *函数名(参数列表)

首先先看一个普通的函数声明:

int fun(int x,int y)

上面就是声明了一个名称为fun的函数,该函数的返回值是int类型,有两个int类型的参数。

再看下面这个函数声明:

int *fun(int x,int y)

这和上面那个函数声明唯一的区别就是在函数名前面多了一个\(*\)号,而这个\(*\)号的出现,导致该函数成为了一个指针函数。对其的理解是:声明了一个名称为fun的指针函数,其返回值是一个int类型的指针,有两个int类型的参数。

如果写成下面这种\(*\)号与int紧贴在一起,与函数名隔开的形式,看起来就明了很多。

int* fun(int x,int y)

这样说来,指针函数没有什么特别的,和普通的函数相比,不过是一个返回的是具体的类型,一个返回的是某种类型的指针(即地址值)。

示例

#include<stdio.h>
int *f(int x, int y); // 声明指针函数
int main(void)
{
	printf("------------------------------ Start\n");
 
    int *p1 = NULL;
	printf("The memeory address of p1 = 0x%x \n", p1);
 
    p1 = f(1, 2);
 
	printf("The memeory address of p1 = 0x%x \n", p1);
	printf("*p1 = %d \n", *p1);
 
	printf("------------------------------ End\n");
    
	return 0;
}
 
/*
 * 指针函数的定义
 * 返回值的指针类型为int 
*/
int *f(int a, int b) {
	int *p = (int *)malloc(sizeof(int));
	printf("The memeory address of p = 0x%x \n", p);
	memset(p, 0, sizeof(int));
	*p = a + b;
	printf("*p = %d \n", *p);
 
	return p;
}

函数指针

定义

函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。

声明格式:类型表示符 (*函数名)(参数列表)

注意:与指针函数的区别就在于\(*\)号是否与函数名用括号括起来

如下:

int (*fun)(int x,int y)

函数指针是需要将一个函数的地址赋值或者传给它,有两种写法:

fun = &Function;
fun = Function;

取地址运算符不是必修的,因为一个函数标识符就表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。

调用函数指针的方式也有两种:

x = (*fun)();
x = fun();

两种方式均可,但是更建议使用第一种,因为第一种可以清楚的指明这是通过指针的方式来调用函数。

示例

#include<stdio.h>
/*
 * 求最大值
 * 返回值是int类型,返回两个整数中较大的一个
*/
int max(int a, int b) {
	return a > b ? a : b;
}
 
/*
 * 求最小值
 * 返回值是int类型,返回两个整数中较小的一个
*/
int min(int a, int b) {
	return a < b ? a : b;
}
 
int (*f)(int, int); // 声明函数指针,指向返回值类型为int,有两个参数类型都是int的函数
 
int main(void)
{
	printf("------------------------------ Start\n");
 
	f = max; // 函数指针f指向求最大值的函数max
    int c = (*f)(1, 2);
 
	printf("The max value is %d \n", c);
 
	f = min; // 函数指针f指向求最小值的函数min
    c = (*f)(1, 2);
 
	printf("The min value is %d \n", c);
 
	printf("------------------------------ End\n");
    
	return 0;
}

二者区别

定义不同

指针函数本质是一个函数,其返回值为指针。

函数指针本质是一个指针,其指向一个函数。

写法不同

指针函数:int* fun(int x,int y)

函数指针:int (*fun)(int x,int y)

posted @ 2021-12-14 11:06  小x蛋x壳  阅读(168)  评论(0编辑  收藏  举报