Что касается указателя на указатель, мне интересно, если это нормально со следующим:
char** _charPp = new char*[10];
for (int i = 0; i < 10; i++)
´ _charPp[i] = new char[100];
То есть — если я хочу указатель на указатель, который указывает на 10 массивов символов.
Вопрос — это нормально, или мне нужно сделать какую-то инициализацию каждого набора символов? Тогда — как мне это сделать?
Позже в программе я буду заполнять эти массивы определенными символами, но я подозреваю, что массивы должны быть инициализированы значениями, такими как «0».
Да, это выглядит очень подходящим,
int arraySizeX = 100;
int arraySizeY = 100;
char** array2d = new char*[arraySizeX] // you've just allocated memory that
// holds 100 * 4 (average) bytes
for(int i = 0; i < arraySizeX; ++i)
{
array2d[i] = new char[arraySizeY] // you've just allocated a chunk that
//holds 100 char values. It is 100 * 1 (average) bytes
memset(array2d[i], 0, arraySizeY) // to make every element NULL
}
Позже в программе я буду заполнять эти массивы определенными символами
но я подозреваю, что массивы должны быть инициализированы значениями до
такие как «0»
Нет, в C ++ нет «значения по умолчанию». Вам нужно присвоить 0 указателю, чтобы сделать его нулевым, или использовать memset (), чтобы сделать это с массивами.
Ответ Netherwire показывает, как правильно инициализировать символы 0
, Я отвечу на первую часть вашего вопроса.
Нет необходимости инициализировать их. Пока вы инициализируете символы до того, как они прочитаны, это правильно.
В зависимости от структуры вашего кода и того, как вы используете массивы, это может быть безопаснее в любом случае, так как может быть трудно найти ошибку, если вы в конечном итоге прочитаете некоторые из них перед инициализацией.
Кроме того, не забудьте позже delete[]
массивы, которые вы выделили. Или еще лучше, подумайте об использовании std::vector
вместо (и, возможно, std::string
в зависимости от того, для чего вы используете эти массивы.)