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

目录

1.指针函数

2.函数指针


1.指针函数

本质上是一个函数,返回值是一个指针类型

#include <stdio.h>

int *my_add(int a, int b){
	int temp = a+b;
	printf("func:&temp = %p\n", &temp);
	return &temp;//不能返回局部变量的地址
				//因为局部变量的生命周期在函数结束时就结束了
				//所占用的空间会被操作系统回收
				//回收后再访问 就是非法访问了  段错误
}


int value;
int *my_add2(int a, int b){
	value = a+b;
	return &value;//可以返回全局变量的地址
}

//也可以返回 static 修饰的局部变量的地址

//也可以返回 由函数的参数传递进来的地址
//如  strcpy 函数返回的 是 dest

int main(int argc, const char *argv[])
{
	int x = 10;
	int y = 20;
	//int *ret = my_add(x, y);
	//printf("ret = %d\n", *ret);//断错误
	
	int *ret = my_add2(x, y);
	printf("ret = %d\n", *ret);

	return 0;
}

2.函数指针

本质上是一个指针,指向的是一个函数

eg:

int (*p)(int ,int );

        一般用在回调函数中,将一个函数当做另一个函数的参数来传给函数

#include <stdio.h>

int my_add(int x, int y){
	return x+y;
}

int my_sub(int x, int y){
	return x-y;
}

//功能:实现两个int类型数据的运算
//当我们需要让两个数做运算时,先调用calculation函数,
//calculation 的第三个参数是一个 函数指针
//具体如何处理 取决于 调用calculation 函数时传递的第三个参数是什么
//然后通过 p 去调用  叫做回调函数
int calculation(int x, int y, int (*p)(int, int)){
	return p(x, y);
}

int main(int argc, const char *argv[])
{
	int a = 10;
	int b = 20;
	printf("%d\n",calculation(a, b, my_add));
	printf("%d\n",calculation(a, b, my_sub));

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒丨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值