怎样理解一个复杂的c语言声明

本文介绍了如何理解复杂的C语言变量声明,通过右左法则详细解释了指针、数组和函数声明的方式,并提供了多个示例帮助读者理解。

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

  我们初学者总是分不清形如int * (* (*fp1) (int) ) [10];的变量声明,下面就来介绍这种变量声明的理解规律:

想看懂这种变量声明,首先得学会右左法则;

   就是先找到变量,再寻找变量右边的提示再看左边再右边一直循环;

注:

           *  代表指针;

         【】代表数组;

          ()代表函数;(不是所有的括号都代表函数,例如 int (*a)(int );只有第二个才是代表函数的)

           int /float/double...代表变量类型;


例如:最简单的  int a;

首先找到变量a,我们先思考a的变量类型,a右边没有任何符号,所以继续看左边为int 就表明a的类型是int型;


再如: int *a;

首先找到变量a,a右边没有提示,找左边,左边是*,表示a是*类型的,也就是说a是指针变量,下一步就是对指针变量的提示了;再看右边有没有指针的提示,没有;再看左边,得到提示 int 所以指针变量所指向的是整型(int)的地址;


再如: int (*a)(int)

首先找到变量a,a右边是括号内,所以看左边是*,所以a是指针变量;再看右边,右边是括号,这是函数的声明方式,所以提示上一步所说的指针变量指向了一个函数;再看左边 int 提示该函数是整型的函数;


所以如:int (*a[10])(int )

首先找到变量a,a右边是数组的【,所以表示a是数组a,下一步找左边,得到数组的提示*,所以,数组的元素都是指针;再看右边,得到指针的提示(),提示指针指向一个函数,括号内int是函数的形参,再看左边,得到函数返回值的提示为int 型;


综上:

遇到*,则说明是上一步得到的为指针,下一步往左(右)得到的则是指针的地址说明;例如下一步看右边并且是()则说明得到的指针指向函数;


遇到[],则说明是上一步得到的为数组,下一步往左(右)得到的则是数组的元素说明;例如下一步看左边并且是 *,则说明数组元素存放的均为指针变量;


遇到(),则说明是上一步得到的为函数,下一步往左(右)得到的则是函数的返回值;例如若这步得到(int a)下一步看左边得到*,则说明函数的形参为int型,返回值为指针;


最后较复杂的例子:

float ( * ( *b()) [] )();     
b是一个函数,该函数形参为空,返回值为数组指针,该数组指针指向一个函数指针数组,数组里的元素指向一个形参为空,返回值为float;

float ( * ( * e[10]) (int *) ) [5];  
e是一个函数指针数组,该数组的元素指向一个形参为int *,返回值为数组指针,该指针指向float型的数组;          


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值