char *[]
- это неполный тип одномерного массива указателей на тип char.
Вы можете написать, например,
char *s[] = { "string1", "string2", "string3" };
, и в этом случае массив s представляет собой массив из трех указателей на строковые литералы.
Если вы объявите массив вне любой функции, например
char *s[];
, тогда вы получите предварительное определение одномерного массива с одним элементом.
Объявление двумерного массива выглядит как
char s[N1][N2];
или
char s[][N2] = { /* some initializers */ };
, где N1
и N2
- некоторые натуральные числа.
Содержит ли строка (ы) одномерный или двумерный символьный массив зависит от пользователя массива.
Вот пример
char s1[] = "Hello";
char s2[6] = "Hello";
char s3[5] = "Hello";
Здесь массивы s1 и s2 содержат строку, а массив s3 не содержит строку, потому что он не включает конечный ноль строкового литерала, используемого в качестве инициализатора.
Или
char * s[] = { "Hello" };
Этот массив не содержит строку. Это массив из одного указателя на строковый литерал.