2014-07-08 30 views
13

数组大小表达式我有以下的C代码示例:常量对参数

int f(const int farg[const 5]) 
{ 
} 

什么是对数组的大小额外的常量呢?当我忽略常量时有什么区别?

+3

[可能与](http://stackoverflow.com/q/17559631/596781) –

+0

第二个'const'给我4个编译器错误 – mch

+2

@mch确认你的编译器支持C99或C11。 (例如-std = c11)。叮当3.4与-std = c11吃这个没有问题。 – WhozCraig

回答

13
int d(const int darg[5]) 

手段darg是指向constint

int e(int earg[const 5]) 

手段eargconst指针int。这是一个c99功能。 T A[qualifier-list e]与参数声明中的T * qualifier-list A等效。

(从上面),当然还有:

int f(const int farg[const 5]) 

手段fargconst指针constint

1

数组大小的附加常量是什么?

C11:6.7.6.3:

一个参数的声明为 ''类型的阵列 '',应调整至'' 合格指针类型 '',其中类型限定符(如果有的话)是数组类型推导的[]中指定的那些。

这意味着

int f(const int farg[const 5]) 

将调整为

int f(const int *const farg) 

而且有什么区别时,我省略了常量呢?

省略后,它相当于

int f(const int frag[5]) //or int f(const int frag[]) 

它最终相当于

int f(const int *farg) 
+3

'const int farg [const 5]'被调整为const const const farg而不是const const const farg。 – ouah

+0

@ouah;奥帕!这是一个错字。它应该是'''指向'''的合格指针 – haccks