This question already has answers here:
Closed 2 years ago.
Why use an asterisk “[*]” instead of an integer for a VLA array parameter of a function?
(2个答案)
我正在编写一个自定义的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编译带有此声明的代码。它给了我以下的警告-
错误:除函数原型作用域外,不允许使用“[*”
所以我试着用这种语法声明一个函数原型,它编译时没有任何错误或警告。我不明白的是这个语法在语义上可能意味着什么。有专家能解释吗?

最佳答案

它是具有未指定大小的可变长度数组的声明符。Furhtermore,以下声明

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

相当于简单地写:
void func(size_t n, char s[*]);

上面的内容对于编写头特别有用,通常只声明参数类型
void func(size_t, char [*]);

关于c - 数组声明方括号内的星号在C中是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42325958/

10-11 22:57
查看更多