Этот
char* [3]
является типом массива, который имеет 3
элементов типа char *
.
Этот
char (*)[3]
является типом указателя, который указывает в массив типа char [3]
.
Вот демонстрационная программа. В этой программе вместо типа char * [3] я буду использовать тип const char *[3]
, потому что в строковых литералах C ++ (которые используются в программе в качестве инициализаторов) есть типы постоянных символьных массивов.
#include <iostream>
int main()
{
const size_t N = 3;
const char * a[N] = { "Hello", "everybody", "here" };
char s[N] = { '1', '2', '3' };
char ( *p )[N] = &s;
for ( size_t i = 0; i < N; i++ )
{
std::cout << a[i] << ' ';
}
std::cout << '\n';
for ( size_t i = 0; i < N; i++ )
{
std::cout << ( *p )[i] << ' ';
}
std::cout << '\n';
return 0;
}
Выходные данные программы
Hello everybody here
1 2 3
В программе используется массив типа const char *[3]
const char * a[N] = { "Hello", "everybody", "here" };
и указатель типа char ( * )[3]
, который инициализируется адрес массива типа char[3]
char s[N] = { '1', '2', '3' };
char ( *p )[N] = &s;