Можно ли инициализировать указатель на строковый массив следующим образом? std::string* str_arr_p[];
Или мне нужно установить размер массива?
Нет, вы не можете. Попробуйте и убедитесь, что вы получите ошибку компиляции.
Есть ли разница между std::string* str_arr_p[n];
и std::string (*str_arr_p)[n];
Да, есть. Первый - это массив n
указателей на std::string
, второй - единственный указатель на массив std::string
размера n
.
Обратите внимание, что оба они неинициализированы (если не объявлено как глобальное или статическое c), то есть оба указывают или содержат произвольный адрес (а). Первый содержит n
произвольных адресов, которые могут быть инициализированы отдельно с допустимым адресом или nullptr
для каждого из n
указателей в массиве. Второй - это отдельный адрес, который нужно инициализировать адресом массива std::string
, который имеет точный размер n
.