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

标签 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 编译带有此声明的代码。它给了我以下警告 -

error: ‘[*]’ not allowed in other than function prototype scope

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

最佳答案

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

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

相当于简单的写:

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

上面的内容对于编写​​ header 特别有用,您通常只在其中声明参数类型

void func(size_t, char [*]);

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

相关文章:

c++ - 构造函数中这个奇怪的冒号成员 (": ") 语法是什么?

c++ - 将 C Flex 词法分析器链接到 C++ 解析器

c - 为什么我的代码可以正常创建文本文件,但只读取文本的第一个字符串?

javascript - 将 jquery 选择器转换为数组

PHP:什么是 "->"和 "=>"?

循环结构声明C

c - 有没有更好的代码来打印斐波那契数列?

c - 为什么 int 和 C 中的 long 大小相同?

javascript - 为什么不能在 Javascript 数组映射函数中映射 ISO 转换?

arrays - 按给定索引开始的顺序遍历数组中的所有元素