const为参数上的数组大小表达式

时间:2014-07-08 08:39:54

标签: c arguments const

我有以下C代码示例:

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

数组大小的附加const有什么作用?当我在那里省略const时有什么区别?

2 个答案:

答案 0 :(得分:13)

int d(const int darg[5])

方法darg是指向const int的指针。

int e(int earg[const 5])

方法earg是指向const的{​​{1}}指针。这是一个c99功能。 int在参数声明中等同于T A[qualifier-list e]

当然(从上面):

T * qualifier-list A

方式int f(const int farg[const 5]) 是指向farg const的{​​{1}}指针。

答案 1 :(得分:1)

  

数组大小的附加const有什么作用?

C11:6.7.6.3:

  

参数声明为' type ''的数组应调整为''指向 type '的合格指针,其中类型限定符(如果有)是在数组类型派生的[]中指定的类型限定符。

这意味着

int f(const int farg[const 5])  

将调整为

int f(const int *const farg)  
  

当我省略const时有什么区别?

省略后,相当于

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

最终相当于

int f(const int *farg)