指针函数和函数指针

指针函数和函数指针

指针函数:

概念理解:

指针函数是指函数返回的类型是某类型的指针的函数。【大白话:“指针”是定语,修饰主语“函数”,所以指针函数就是一个函数,只不过返回的数据类型有点特殊,是个地址值】

声明格式:

类型说明符 *函数名(参数)

int *f(int x,int y){
    ......
}
//这里就是定义了一个返回值类型为指向整型变量的指针的函数,所以函数f就是一个指针函数
指针函数的调用:
int *p;
p=f(3,7);
//函数的返回值必须用同类型的指针变量来接收

函数指针:

概念理解:

在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”,也就是函数指针了。【大白话:“函数”是定语,修饰“指针”,所以函数指针就是一个指针,这个指针指向的是一个函数的入口地址】

声明格式:

类型说明符(*指针变量名)();

int (*fptr)();  //声明一个函数指针
函数指针的赋值:
fptr=&func
fptr=func
/*
上面两种写法都表示同一个意思,即将func函数的首地址赋值给指针fptr。这里也可以省略&,因为单单一个函数名就代表着函数的首地址
*/
函数指针的调用:
int x;
x=(*fptr)();
x=fptr();
/*
两种写法都对,如果函数指针所指的函数是需要传递参数的,需要在后面的括号里写上要传递的参数,
例如:x=fptr(参数1,参数2,......)
*/
函数指针的例子:
void A{
    printf("A\n");
}
void B{
    printf("B\n");
}
int main (){
    void (*funcp)();	//定义一个函数指针
    funcp=A;			//把函数A的首地址赋值给函数指针funcp
    (*funcp)();			//调用A这个函数,因为是void型,所以不需要参数来接收
    funcp=B;			//现在把函数B的首地址赋值给funcp
    (*funcp)();			//调用函数B
}
//程序输出的结果是:A (换行) B

下面用一个例子来实践一下函数指针:

#include <stdio.h>

void printElement(int n) {
	printf("%d  ", n);
}

void TraverseLinkList(int p[5],void (*visit)(int m)) {
	int n;
	for (n = 0; n < 5; n++) {
		visit(p[n]);	//调用传递过来的函数
	}
}

int main() {
	int num[5] = { 2,4,6,8,10 }; //定义一个数组

	void (*fpt)(int n);			 //定义一个函数指针变量
	fpt = printElement;			 //让这个指针指向printElement函数的首地址
	TraverseLinkList(num,fpt);	

	return 0;
}
//程序输出为:2	4	6	8	10

以上是个人在学习过程中的一些理解和记录,如有错误,欢迎指正批评~~~

参考信息来源:https://zhidao.baidu.com/question/95800995.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值