gary hagerty Ответов: 3

Как инициализировать переменную, объявленную как unsigned char*


Всем Привет,

Пожалуйста, имейте в виду, что я новичок в C++!

Мне нужно вызвать функцию, в которой я передаю переменную, объявленную как unsigned char*, эта переменная должна быть инициализирована как 5 байт из 17, как бы я это сделал?

Кроме того, эта функция передает обратно переменную, объявленную как unsigned char*, она должна содержать 5 байт, как бы я это сделал?

Спасибо

Что я уже пробовал:

Я попробовал погуглить, но не смог найти ничего подходящего к моему случаю.

CPallini

"Кроме того, эта функция передает обратно переменную, объявленную как unsigned char*, она должна содержать 5 байт, как бы я это сделал?
Эта часть, как отметил наш Грифф- это сложно. Не могли бы вы предоставить более подробную информацию о такой функции?

3 Ответов

Рейтинг:
21

Richard MacCutchan

Вы могли бы начать с Справочник По Языку C++ | Microsoft Docs[^].

Правда, довольно простой код, но ...

unsigned char uchars[5] = { 17, 17, 17, 17, 17 };
unsigned char* uresult = thefunction(uchars);


CPallini

5.

Рейтинг:
0

OriginalGriff

Просто чтобы добавить к решению Ричарда, пару битов для вас, чтобы подумать.
1) в спецификации говорится, что имя массива является указателем на первый элемент. Так что когда Ричард сделает это:

unsigned char uchars[5] = { 17, 17, 17, 17, 17 };
thefunction(uchars);
он передал имя массива в функцию в качестве указателя на первый элемент. Он мог бы написать это так:
unsigned char uchars[5] = { 17, 17, 17, 17, 17 };
thefunction(&(uchars[0]));
и явно передайте указатель, но он не нужен.
2) вы должны быть осторожны при возврате указателей из функций: если возвращаемый вами массив не является тем же массивом в памяти, который передается - а это, вероятно, не должно быть - то вы должны быть уверены, что не объявляете массив непосредственно внутри вашей функции, так как он будет создан в стеке и память "переработана" при выходе из массива. Это может вызвать некоторые действительно неприятные ошибки и называется "висячая ссылка". Чтобы выделить память кучи, которую вы можете вернуть из своей функции, но которая будет нуждаться в правильном удалении, чтобы предотвратить "утечку памяти" из вашего приложения, используйте либо malloc или new ключевое слово.


CPallini

5.

Рейтинг:
0

KarstenK

Вы должны изучить язык, чтобы понять его силу и ловушки. Всегда помните, что C++ - это кувалда: очень мощная, но она может нанести большой вред при неправильном использовании.

Одной из распространенных проблем является понимание типов данных и указателей. Тип данных или объект - это фрагмент в памяти. Указатель (он же с буквой"*") - это только адрес к нему.

Пример

unsigned char myVar = 'a';
unsigned char *pToVar = 0;
pToVar = &myVar;//assign pointer to point to myVar
Это выдающийся случай. Учебник по C++ который также представляет Microsoft Visual Studio и ее мощный отладчик. Учиться на этом уроке очень хорошо вложенное время.


Stefan_Lang

"Всегда помните, что C++ - это кувалда"
Я позволю себе не согласиться: C++ - это очень большой набор инструментов, содержащий отличные инструменты для всех видов PTO-проектов. Вы просто должны быть осторожны, чтобы не придерживаться первого инструмента, который вы найдете для всех проектов: бывают моменты, когда вам нужна кувалда, но иногда вам понадобится зубочистка. Лучше убедитесь, что вы используете правильный инструмент в нужное время! ;-)