2016.11.22 左右法则

左右法则

右左法则:首先从最里面的圆括号内未定义的标识符开始阅读看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。

  总之对声明进行分析,最根本的方法还是按优先级和结合性来类比替换,从那些最基本的声明进行类比,简化,从而进行理解。下面分析几个例子,来具体阐述如何使用这种方法。

简单:

int a; 这里从变量看,向右看是分号,转向左,是int 所以

        a是整形变量

int *a; 从变量开始,先向右看,是分号,然后向左看,这里有一个

           *,说明变量a是一个指针,然后继续向左,是int所以a是一

           个整形指针变量

int **a; 这里还是从变量开始看,先向右看,是分号,然后向左看

            是*,说明是指针变量,然后继续向左看,还是*,所以a是

            指针的指针变量

int a[10];  这里从变量看,先向右看,是[],说明a是数组

int *a[10];  这里从变量看,先向右,是[],说明a是数组,然后向左

                 ,可以看到是*,说明a是一个整形指针数组

int (*a)[10];  从变量开始,先向右,是),说明a是一个变量

                         然后向左看,是*说明a是指针变量,然后继续向

                         右看,是【】,所以a是数组指针变量

int (*a)(int);   从变量开始看,先向右,是),说明a是变量,然后

                      向左看,是*,所以a是指针变量,然后向右,是

                      (),说明是个函数,所以a是一个函数指针变量,

                       指针指向一个函数,函数的形参是int, 返回值,是

                        int

int (*a[10])(int); 从变量开始看,先向右 看,是【】,说明a是

                                一个数组,继续向右,是),然后向左看,是

                              *,说明a是一个指针数组,继续向右看,是

                               (),说明这是函数指针数组,行参数int,返

                              回值是int

困难:

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

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

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

b是一个函数,该函数形参为空,返回值为数组指针,该指针指向一个函数指针数组,数组元素指向一个形参是空,返回值为float

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

c是一个函数指针变量,指向一个形参字符变量a,和一个形参是函数指针变量,无返回值

float (*(*e【10】)(int *))[5]

e是一个函数指针数组,数组里的元素指向一个函数,该函数形参是int*,返回值为数组指针,指向的数组为float型数组


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值