【笔记】C_函数指针与表达式复杂的指针理解

本文深入解析了C语言中的函数指针及复杂指针概念,包括如何定义与使用函数指针,以及对复杂指针类型的逐步解读,如数组指针、指向函数的指针等,帮助读者更好地理解和掌握C语言的高级特性。

1.函数指针

int (*vptr)(int,int) = max;

格式是这样的,表示vptr这个指针指向 int max(int,int);的函数。

int max(int a,int b){
	return a>b? a:b;
}

int main(){
	int (*pMax)(int,int) = max;
	int a = 3,b =6;
	int result = pMax(a,b);
	printf("the max number:%d\n",result);
	return 0;
}

2.复杂指针理解

C语言中对于符号的定义,从名字开始,然后根据符号的先后顺序来解释定义。以下先后顺序从高到低:

定义中被括号( )括起来的那部分。
后缀操作符:括号( )表示这是一个函数,方括号[ ]表示这是一个数组。
前缀操作符:星号*表示“指向xxx的指针”。

1)int* p1[6]
这样写比较好理解,也能写成int *p1[6],先后顺序,先读p1[6],代表这是一个数组,数组中包含6个int*类型。
2)int (*p2)[6]
先读*p2,代表p2是个指针,再往外读,指向int[6]的数组。
3)int (*p3)(int ,int )
先读*p3,代表p3是个指针指向 int func(int,int)函数。
4)char *(* c[10])(int **p);
先读括号里头*c[10],c[10]的优先级高,代表c[10]是个指针数组,再往外,读(*c[10])(int **p),说明这个指针数组指向的是一个函数func(int **p),这个函数返回类型是char*。
5)int (*(*(*pfunc)(int *))[5])(int *);
先读括号里的*(*(*pfunc)(int *))[5],继续分解读*(*pfunc)(int *),可知pfunc是个指向函数的指针,函数返回值为指针。往外看,*(*(*pfunc)(int*))(int*))[5],可知这个pfunc指向的函数返回的指针,指向一个*[5]指针数组,这个数组里头的指针指向int func(int *)函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值