Я пытаюсь выделить char
массив в куче, а затем сделать указатель на него:
char * head;
char * coolArray = new char[5];
Это должно выделить 5 бит в куче с правильными символами?
head = &coolArray;
Не в состоянии сделать это ^ из-за &coolArray
быть char **
?
Я могу это исправить, выполнив:
head = *&coolArray;
Но я не уверен, почему это работает.
Кто-нибудь может объяснить эту концепцию указания на то, что находится в куче?
Прежде всего, прежде всего, используйте 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
вместо.
«Куча» и выделения памяти — красные сельди.
&coolArray
это здесь coolArray
является».
*p
это «вещь, которая находится на месте p
».
*&x
это то, что где coolArray
есть «, который является coolArray
,
Это работает почти как в реальном мире — «человек, который живет в доме, где живет Джек» — это сам Джек, верно?
Кстати, вы могли бы также написать head = coolArray;
,