相关疑难解决方法(0)

为什么对函数的VLA数组参数使用星号"[*]"而不是整数?

在函数中使用变长数组作为参数时

int sum(int n, int a[n]);
Run Code Online (Sandbox Code Playgroud)

很容易理解第一个参数(n)指定第二个参数(a)的长度.但遇到另一个用于VLA的原型作为参数

int sum(int n, int a[*]);
Run Code Online (Sandbox Code Playgroud)

真的很难理解为什么*用而不是在n里面[]

c arrays function function-parameter

33
推荐指数
1
解决办法
1691
查看次数

ANSI-C语法 - 数组声明,如[*] et alii

来自-link-的ANSI C语法给出了以下数组声明规则:

 (1) | direct_declarator '[' type_qualifier_list assignment_expression ']'
 (2) | direct_declarator '[' type_qualifier_list ']'
 (3) | direct_declarator '[' assignment_expression ']'
 (4) | direct_declarator '[' STATIC type_qualifier_list assignment_expression ']'
 (5) | direct_declarator '[' type_qualifier_list STATIC assignment_expression ']'
 (6) | direct_declarator '[' type_qualifier_list '*' ']'
 (7) | direct_declarator '[' '*' ']'
 (8) | direct_declarator '[' ']'
Run Code Online (Sandbox Code Playgroud)

现在我对这些问题有一些疑问:

  • 除了(3)只能在C99中使用(1) - (6)吗?
  • 什么是(4)和(5)?关键字"静态"让我困惑.
  • 在哪里使用(6)?
  • 以下两个函数原型之间的区别是什么:

    void foo(int [*]);

    void foo(int []);

谢谢.

c arrays grammar declaration

10
推荐指数
1
解决办法
1743
查看次数

标签 统计

arrays ×2

c ×2

declaration ×1

function ×1

function-parameter ×1

grammar ×1