Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аргумент функции unsigned char*& 
:(
    Опции темы
Alexey91
  Дата 14.5.2012, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 18.9.2008

Репутация: нет
Всего: нет



Здравствуйте!

Есть функция 

Код

bool Decode( unsigned char*& data, unsigned int& dataSize );



Как правильно ее прочитать? Я про первый параметр

Ссылка на указатель на область памяти типизированную под uchar.
Затем создается альтернативное имя переменной указателя?
Проблема  том, что я не понимаю как в функцию передать свою char-строку

Код

char* s = new char [16];


PM   Вверх
kosmonaFFFt
Дата 14.5.2012, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Просто передаешь свою строку 
Код

bool result = Decode(s, size_of_data);
 и все, никаких особо хитрых действий не надо... Только учитывай, что функция может изменить твой указатель в процессе работы, т. к. отдаешь ты ссылку на него...


--------------------
user posted image
PM MAIL ICQ   Вверх
bsa
Дата 14.5.2012, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Alexey91, первым параметром этой функции является ССЫЛКА на указатель на unsigned char (типы надо читать справа налево).

Добавлено через 2 минуты и 47 секунд
Цитата(Alexey91 @  14.5.2012,  08:18 Найти цитируемый пост)
Проблема  том, что я не понимаю как в функцию передать свою char-строку

Чтобы ответить на этот вопрос необходимо прочитать документацию. Но судя по использованию ссылок, можно предположить, что данная функция сама меняет размер передаваемого ей массива. Более того, ей необходим массив беззнаковых чаров, а не просто char'ов.
PM   Вверх
Alexey91
Дата 20.5.2012, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 18.9.2008

Репутация: нет
Всего: нет



kosmonaeTET, так просто вызывать, компилятор бьет по рукам
bsa, можно подробнее про изменение размера передаваемого ей массива?
PM   Вверх
Alexeis
Дата 20.5.2012, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 4
Всего: 459



Alexey91, указатель просто так по ссылке не передают, потому как он имеет размер 4 байта. По ссылке передают лишь большие объемы данных, либо передают тогда когда хотят изменить саму переменную которую передали. В обычных случай передают просто указатель по значению, это позволяет менять содержимое на которое он указывает, но не саму переменную которую передали. Тут же, очевидно, функция либо сама выделяет память под данные, либо расширяет настолько насколько нужно, причем новый размер возвращает в dataSize.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
shara
Дата 20.5.2012, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: 2
Всего: 2



Цитата(Alexey91 @  20.5.2012,  09:02 Найти цитируемый пост)
подробнее про изменение размера передаваемого ей массива? 


как-то так..
Код


void foo()
{
  unsigned char* buff;
  unsigned int buffSize = 8;

  buff = new unsigned char [buffSize];

  cout << "data buff 0x"<<data<< "  size "<< buffSize << endl;

  bool isResized = Decode (buff, buffSize);

  if (isResized) {
    cout << "data buff NEW position at 0x"<<data<< "  NEW size "<< buffSize << endl;
  }
}


bool Decode( unsigned char*& data, unsigned int& dataSize )
{
bool isResized = false;
// ...code....

  if  (needToResizeData) {
    if (data)
      delete[] data;

    newDataSize = dataSize + 42; //  =)
    data = new unsigned char [newDataSize];
  
    dataSize = newDataSize;
    isResized = true;
  }
// ..code..

return (isResized);
}




--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.