在函数中使用变长数组作为参数时
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里面[]?
来自-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)
现在我对这些问题有一些疑问:
以下两个函数原型之间的区别是什么:
void foo(int [*]); 和
void foo(int []);
谢谢.