关于指针函数以及函数指针的一些理解

本文详细解析了函数指针和指针函数的概念,并通过代码实例展示了它们在编程中的应用,包括如何使用函数指针进行函数调用和参数传递,以及指针函数的定义与使用。同时,文章还探讨了函数指针与普通函数的区别,以及在不同场景下如何高效地运用这些概念。最后,通过实验展示了函数指针和指针函数在内存操作上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数指针:

 

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

 

void (*f) (int x); /* 声明一个函数指针 */

 

f=func; /*将func函数的首地址赋给指针f */

 

#include<stdio.h>
int max(int a,int b){return a<b?b:a;}
int min(int a,int b){return a<b?a:b;}
int sum(int a,int b){return a+b;}
int differ(int a,int b){return a-b;} 
void display(int a,int b,int (*p)(int a,int b)){
	printf("%d\n",sizeof(p));
	printf("%d\n",p(a,b));
}
int main(){
	int a,b;
	int (*pl)(int a,int b); 
	while(~scanf("%d%d",&a,&b)){
		puts("max: ");display(a,b,max);
		puts("min: ");display(a,b,min);
		puts("sum: ");display(a,b,sum);
		pl=differ;
		puts("differ ");printf("%d\n",pl(a,b)); 
	}
	return 0;
}

指针函数:

 

返回值为地址;

 

定义:int *p(){};

 

#include<stdio.h>
int *f(int *a){
	for(int i=0;i<5;i++)a[i]=i;a[5]=NULL;
	return a;
};
int main(){
	int a[10],*p;
	p=f(a);
	p[5]=NULL;
	int i=0;
	while(i<5)printf("%d ",*(p+i++));puts("");//这时候不能++p,不解 
	while(i>0)printf("%d ",*(a+ --i));puts("");//这个++a就不能运行。不解 
	return 0;
}

 

两者区别:

一、加不加括号;

二、一个是指针变量,一个是函数

 

关于函数字节:

#include <iostream>//对于所有硬件来说,所有指针是 8 个字节的宽度
int main() {
    std::cout <<
        "sizeof(int*)      == " << sizeof(int*) << "\n"
        "sizeof(double*)   == " << sizeof(double*) << "\n"
        "sizeof(void(*)()) == " << sizeof(void(*)()) << std::endl;
}

  

 

转载于:https://www.cnblogs.com/handsomecui/p/5007056.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值