指针的右左法则

指针的右左法

右左法则(右左法则的英文原文翻译);首先从最里面的圆括号开始阅读,然后向右看,再往左看。每当遇到圆括号时,就应该调转阅读方向。一旦解析完圆括号里面所有东西,就跳出圆括号。重复整个过程直到整个声明解析完成。其实左右法则就是以标示符为中心点,自右向左旋转解读指针的声明含义。

例如:int (*a)[10];   整型数组指针变量(首先看括号里面,a是一个指针变量,他存放的是数组元素的地址,而数组的每个元素都是整形)

            int (*a[10])(int)   函数指针数组(首先a是一个数组,它的元素都是指针,指针指向一个形参为整形,返回值也为整形的函数)

下面来看几个复杂一点的指针声明

int *(*(*a)(int))[10](以a为中心,层层剥开括号,从右往左看)

a:函数指针变量,指向一个形参为整形,返回值为返回值数组指针,该指针指向一个整形指针数组。

阅读步骤: 
1. 从变量名开始 -------------------------------------------- a
2. 往右看,什么也没有,碰到了),因此往左看,碰到一个* ------ 一个指针 
3. 跳出括号,碰到了(int) ----------------------------------- 一个带一个int参数的函数 
4. 向左看,发现一个* --------------------------------------- (函数)返回一个指针 
5. 跳出括号,向右看,碰到[10] ------------------------------ 一个10元素的数组 
6. 向左看,发现一个* --------------------------------------- 指针 
7. 向左看,发现int ----------------------------------------- int类型 

再来看一个例子: 

int *( *( *arr[5])())(); 

arr:函数指针数组,该数组里的元素指向一个形参为空,返回值是一个函数指针,该指针指向一个形参为空,返回值为整形指针的函数

 
阅读步骤: 
1. 从变量名开始 -------------------------------------------- arr 
2. 往右看,发现是一个数组 ---------------------------------- 一个5元素的数组 
3. 向左看,发现一个* --------------------------------------- 指针 
4. 跳出括号,向右看,发现() -------------------------------- 不带参数的函数 
5. 向左看,碰到* ------------------------------------------- (函数)返回一个指针 
6. 跳出括号,向右发现() ------------------------------------ 不带参数的函数 
7. 向左,发现* --------------------------------------------- (函数)返回一个指针 
8. 继续向左,发现int --------------------------------------- int类型 

 

float ( * ( *b()) [] )();     

b是一个函数,该函数形参为空,返回值为数组指针,该数组指针指向一个函数指针数组,数组里的元素指向一个形参为空,返回值为浮点型;


阅读步骤: 
1. 从变量名开始 -------------------------------------------- b

2. 往右看,发现是一个函数 ---------------------------------- 一个不带参数的函数
3. 向左看,发现一个* --------------------------------------- 指针 
4. 跳出括号,向右看,发现数组--------------------------------   元素个数未定的数组
5. 向左看,碰到* ------------------------------------------- 指针 
6. 跳出括号,向右发现() ------------------------------------ 不带参数的函数
8. 继续向左,发现float --------------------------------------- float类型 

   

void * ( *c) ( char a, int (*b)());       
  
  

float ( * ( * e[10]) (int *) ) [5];  

e是一个函数指针数组,该数组的元素指向一个形参为整形指针,返回值为数组指针,该指针指向f浮点型的数组;          


 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值