Правильный способ определить указатель на массив строк (C ++)? - PullRequest
0 голосов
/ 19 апреля 2020

Могу ли я определить указатель на массив строк следующим образом?

std::string* str_arr_p[];

Или мне нужно установить размер массива?

PS: Есть ли разница между std::string* str_arr_p[n]; и std::string (*str_arr_p)[n];

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Можно ли инициализировать указатель на строковый массив следующим образом? 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.

1 голос
/ 19 апреля 2020
std::string* str_arr_p[n];

- это массив указателей на std::string. std::string (*str_arr_p)[n]; здесь str_arr_p - указатель на массив из n std::string

std::string* str_arr_p[]; это определение, вы ничего не инициализируете. std::string* str_arr_p[] = new std::string* [x]; куча выделена или std::string* str_arr_p[50]; стек выделен, это будет уничтожено после завершения функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...