Объявление и инициализация массива массивов указатель-указатель

Что касается указателя на указатель, мне интересно, если это нормально со следующим:

    char** _charPp = new char*[10];

for (int i = 0; i < 10; i++)
´   _charPp[i] = new char[100];

То есть — если я хочу указатель на указатель, который указывает на 10 массивов символов.

Вопрос — это нормально, или мне нужно сделать какую-то инициализацию каждого набора символов? Тогда — как мне это сделать?

Позже в программе я буду заполнять эти массивы определенными символами, но я подозреваю, что массивы должны быть инициализированы значениями, такими как «0».

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 (), чтобы сделать это с массивами.

2

Другие решения

Ответ Netherwire показывает, как правильно инициализировать символы 0, Я отвечу на первую часть вашего вопроса.

Нет необходимости инициализировать их. Пока вы инициализируете символы до того, как они прочитаны, это правильно.

В зависимости от структуры вашего кода и того, как вы используете массивы, это может быть безопаснее в любом случае, так как может быть трудно найти ошибку, если вы в конечном итоге прочитаете некоторые из них перед инициализацией.

Кроме того, не забудьте позже delete[] массивы, которые вы выделили. Или еще лучше, подумайте об использовании std::vector вместо (и, возможно, std::string в зависимости от того, для чего вы используете эти массивы.)

1

По вопросам рекламы [email protected]