char *array[size]
объявляет массив size
указателей на char
с.
char (*aPointer)[size]
объявляет указатель на массив size
char
с.
Просто для полноты, есть также char *cPointer
, который объявляет указатель на char
, который может быть первым в массиве.Разница между этим и aPointer
семантическая.Расположение памяти будет идентичным.Например, aPointer + 1
вернет указатель, который указывает на местоположение size
байт после того, на который указывает aPointer
, а cPointer + 1
вернет указатель, который указывает на местоположение на один байт после того, на который указываетcPointer
.
Итак, char *array[size]
объявляет что-то вроде этого:
array +--------+
+------+ | a char |
| a[0] +--->+--------+
+------+
| a[1] +--->+--------+
+------+ | a char |
| ... | +--------+
+------+
Конечно, каждый из char
, на которые указывает указатель, также может быть первым элементом массива.:
array +--------+--------+--------+
+------+ | a char | a char | ... |
| a[0] +--->+--------+--------+--------+
+------+
| a[1] +--->+--------+--------+--------+
+------+ | a char | a char | ... |
| ... | +--------+--------+--------+
+------+
char (*aPointer)[size]
объявляет что-то вроде этого:
aPointer
+--------+ +--------+
| +--->+ a char |
+--------+ +--------+
| a char |
+--------+
| ... | aPointer + 1
+--------+ +--------+
<---+ |
+--------+
char *cPointer
может объявлять что-то вроде этого:
cPointer
+--------+ +--------+
| +--->+ a char | cPointer + 1
+--------+ +--------+ +--------+
| a char +<---+ |
+--------+ +--------+
| ... |
+--------+
Обратите внимание, что во всехВ этих примерах указатели изначально ни на что не указывают.Вы должны указать им на что-то самостоятельно.