数组声明的方括号内的星号在C中是什么意思

时间:2017-02-19 10:07:34

标签: c arrays syntax

我正在编写一个自定义C99解析器。我从this链接获得了语法。该语法表示以下是声明数组的有效语法 -

int arr[*];

语法的相关部分如下 -

direct-declarator ::=
    identifier
    "(" declarator ")"
    direct-declarator "[" type-qualifier-list? assignment-expression? "]"
    direct-declarator "[" "static" type-qualifier-list? assignment-expression "]"
    direct-declarator "[" type-qualifier-list "static" assignment-expression "]"
    direct-declarator "[" type-qualifier-list? "*" "]"
    direct-declarator "(" parameter-type-list ")"
    direct-declarator "(" identifier-list? ")"

我尝试使用gcc使用此声明编译代码。它给了我以下警告 -

  

错误:'[*]'不允许在函数原型范围之外

所以我尝试使用这种类型的语法声明一个函数原型,并且编译时没有任何错误或警告。我没有得到的是这种语法在语义上可能意味着什么。有解释的专家吗?

1 个答案:

答案 0 :(得分:2)

它是一个具有未指定大小的可变长度数组的声明符。此外,还有以下声明

void func(size_t n, char s[n]);

相当于简单地写:

void func(size_t n, char s[*]);

以上内容对于编写​​标题特别有用,您通常只声明参数类型

void func(size_t, char [*]);