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

本文详细介绍了函数指针和指针函数的概念及用法,并通过具体示例展示了如何使用函数指针进行运算符重载以及指针函数如何返回地址。同时,对比了两者的区别,并解释了指针在不同数据类型下的字节大小。

摘要生成于 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;
}

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值