ANSI-C грамматика - объявления массива, такие как [*] и др.

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 '[' ']'

Теперь у меня есть несколько вопросов по этому поводу:

Могу ли я использовать (1) - (6) кроме (3) только в C99?Для чего нужны (4) и (5)? Ключевое слово «статический» смущает меня.Где использовать (6)?

В чем разница между следующими двумя прототипами функций:

void foo(int [*]); а также

void foo(int []);

Спасибо.

Ответы на вопрос(3)

Ваш ответ на вопрос