Декларации, которые вы показываете, очень отличаются.Первый - это массив массивов char
, а второй - массив указателей на char
(также известный как зубчатый массив ).
Оба могут рассматриваться одинаковоКак массивы строк, но есть довольно много семантических различий.Например, в первом ваши строки ограничены девятью символами (плюс терминатор), в то время как во втором строки могут быть любой длины (вписываясь в память).
Существует также разница в том, как эти два массива распадается (что происходит, когда вы используете простой test
, когда ожидается указатель).Первый будет распадаться на указатель на массив char
, то есть char (*)[10]
.Второй будет затухать, указывая на указатель на char
, то есть char **
.
Теперь по большому вопросу: что вы должны использовать?Ну, это действительно зависит от варианта использования.Будут ли у вас только строки фиксированного размера, размер которых известен с самого начала (а общий размер достаточно мал, чтобы поместиться в стек, где обычно хранятся локальные переменные)?Тогда вы можете использовать первый.Если вы не знаете длины строк или они могут отличаться более чем на несколько символов, тогда, вероятно, лучше выбрать второй.
Второй вопрос во многом зависит отвыбор массивов.Если у вас есть массивы массивов (первое объявление), вам нужно скопировать строки, используя strcpy
.Если вы выбрали массив указателей (второе объявление), вы можете просто назначить указатели вокруг.