Присвоение неподписанного символа * число - PullRequest
0 голосов
/ 08 октября 2019

Я использую беззнаковый символ * для хранения информации, которая будет максимум около 200, я использую указатель на символ, потому что хочу удалить позже как

unsigned char* hello = new unsigned char;
delete hello;

, но когда я пытаюсьприсвойте ему значение типа hello = 54, это дает ошибку a value of type "int" cannot be assigned to an entity of type "unsigned char*"

1 Ответ

1 голос
/ 08 октября 2019

Сделайте себе одолжение и просто используйте int, если это целое число. В противном случае он становится беспорядочным, когда вы сталкиваетесь с перегрузками функций, которые ожидают, что char объекты на самом деле будут символами (например, форматированный поток ввода-вывода):

int hello = 52;

Если вам действительно нужно сэкономить немного памяти, вы можете использовать1006 * напрямую:

unsigned char hello = 52;

Если по каким-либо причинам вы хотите ограничить время жизни объекта меньшей областью действия, вы можете просто ввести другой уровень вложенности:

{
    unsigned char hello = 52;
} // no need to delete here, because the object is destroyed automatically

Обратите внимание, что вы фактически используете больше памяти, когда вы объявляете указатель (который, вероятно, будет 64-битной шириной в настоящее время) и динамически выделяете память для хранения байта в другом месте.

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

std::unique_ptr<char> hello = std::make_unique<char>(52);

Но учтите, что это обычно хлопотно, и большинствочасто не нужно вообще, особенно для таких маленьких объектов. Просто объявите локальную переменную, скопируйте ее по мере необходимости и покончите с этим.


Кроме того, вам нужно разыменовать указатель , чтобы получить доступ к объекту, на который указывает указатель:

unsigned char * p = new unsigned char;
*p = 52;
delete p;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...