Инициализация и навигация по символу **

Итак, рассмотрим этот код:

char** pool = new char*[2];
pool[0] = new char[sizeof(char)*5];

Насколько я знаю, это создает указатель на массив из 2-х символьных указателей. Затем вторая строка устанавливает первый из этих двух указателей на первый элемент в массиве из 5 символов. Пожалуйста, поправьте меня, если я ошибаюсь.

Если я не ошибаюсь

  1. Как бы я проинициализировал все эти символы?
  2. Как бы я сменил конкретный символ? Например, установка последнего символа в NULL в каждом массиве.

0

Решение

Насколько я знаю, это создает указатель на массив из 2-х символьных указателей. […]

char** pool = new char*[2];

Нет, эта строка создает указатель на указатель символа. Выражение справа создает массив из 2 указателей на символы. Вы можете инициализировать этот двойной указатель с массивом указателей, потому что правая часть превратится в двойной указатель.

Затем вторая строка устанавливает первый из этих двух указателей на первый элемент в массиве из 5 символов. […]

pool[0] = new char[sizeof(char)*5];

Что вы подразумеваете под «первым из этих двух указателей на символы»? Вы назначаете только один указатель на эту строку.

Как бы я проинициализировал все эти символы?

Используя цикл для итерации указателей и назначения им действительной памяти.

Как бы я сменил конкретный символ? Например, установка последнего символа в NULL в каждом массиве.

for (char** p = pool; p != (pool + 2); ++p)
{
*p = new char[/* amount of chars */];
(*p)[/* amount of chars */] = '\0';
}

Но это полный беспорядок. Было бы значительно проще использовать вектор строк:

std::vector<std::string> pool;
1

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

Других решений пока нет …

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