C语言函数声明问题。

先说优先级:

() 、 []  优先于 *


c语言声明优先级规则。(摘自于《C专家编程》第三章)

A、声明先从它的名字开始读取,然后按照优先级依次读取。

B、优先级从高到低:

B.1:声明被括号括起来的部分

B.2:后缀操作符:

  括号()表示是一个函数,方括号[ ]表示是一个数组

B.3:前缀操作符:星号* 表示“指向.....的指针”

C、如果有const和volatile 关键字的后面紧跟类型说明符(例如:int 、char),那么它作用于类型说明符

在其他情况下,const和volatile关键字作用于它左边紧邻的指针星号。


举例:

⒈ int( * fun() )( )

  适用规则                               解释

A   变量名为 fun

B2 后缀操作符(优先级 括号大于星号) 所以fun和()先结合,fun()表示一个函数

B3 前缀操作符 fun()在和*结合,fun()表示一个函数,*fun()表示该函数返回一个指针

B1 *fun()被括号括起来了。( *fun() )

B2     后缀操作符 ( *fun() )后面接了一个() 表示是一个函数,而*fun()返回一个指针,所以 该指针指向一个函数 

这个函数返回值类型为int 类型。

最后 连起来说: fun是一个函数,该函数返回一个指针,这个指针指向另外一个函数,这个另外的函数返回值为int 类型。

意思就是: 函数可以返回一个指向函数的指针。

⒉int  (*foo() )[ ]

适用规则                              解释

A 变量名为 foo

B2 后缀操作符 foo()表示一个函数

B3 前缀操作符 *foo()表示该函数返回一个指针

B1 ( *foo() )

B2 括号后面为[ ]表示是一个数组,foo()函数返回一个指针,该指针指向一个一维数组 这个一维数组元素类型为int类型

意思就是 函数可以返回一个指向数组的指针。

⒊int (*foo[ ])( )

foo是一个数组,数组里面的元素都为 指针类型,这个每个指针都指向一个函数。 数组里面可以有函数指针。

⒋ int foo[ ][ ]

  foo是一个数组,数组里面的元素都为一维数组。很多教科书,把二维数组都化成方格来表示,这样只是为了好看,其实在内存中都是顺序排列

      

看一个复杂的:

char  *  const  * (* next) ( )

next 是一个指针,该指针指向一个函数,该函数返回一个另外一个指针,另外的这个指针指向只读的指向char类型的指针。另外的这个指针是二级指针。

char *(* c[10] )(int **p)

c是一个数组,数组元素都是指针,这10个指针指向函数(函数指针),函数返回的是指向char类型的指针。注意int **p 是函数的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值