Попытка сделать указатель на динамически распределенный массив символов

Я пытаюсь выделить char массив в куче, а затем сделать указатель на него:

char * head;

char * coolArray = new char[5];

Это должно выделить 5 бит в куче с правильными символами?

head = &coolArray;

Не в состоянии сделать это ^ из-за &coolArray быть char **?

Я могу это исправить, выполнив:

head = *&coolArray;

Но я не уверен, почему это работает.

Кто-нибудь может объяснить эту концепцию указания на то, что находится в куче?

1

Решение

Прежде всего, прежде всего, используйте std::string обрабатывать строки символов.

За исключением целей обучения, как правило, не использовать сырые массивы, указатели и new выражения.


» Это должно выделить 5 бит

Нет, это выделяет 5 байтов.

Байт — это самая маленькая адресуемая единица памяти в C ++. Типы char, unsigned char а также signed char, а также с C ++ 17 и выше std::byteВсе гарантированный размер байта. Число битов на байт обычно составляет 8 и составляет по меньшей мере 8, но может быть больше и определяется CHAR_BIT постоянная от <limits.h> заголовок.


head = &coolArray;

Просто пиши

head = coolArray;

Это назначает значение указателя (тот в переменной указателя coolArray) к переменной указателя.


head = *&coolArray;

Как правило, для любой переменной v, выражение &v дает вам указатель на эту переменную.

Разыменование этого указателя, *&v, обозначает одну и ту же переменную. Так что вы могли бы просто написать v вместо.

1

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

«Куча» и выделения памяти — красные сельди.

&coolArray это здесь coolArray является».
*p это «вещь, которая находится на месте p».
*&x это то, что где coolArray есть «, который является coolArray,

Это работает почти как в реальном мире — «человек, который живет в доме, где живет Джек» — это сам Джек, верно?

Кстати, вы могли бы также написать head = coolArray;,

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector