2013-12-09 1 views
1

Я разработчик Java с очень небольшим знанием указателей. У меня есть код следующий C++ (что кто-то писал), что я пытаюсь понять:Каков результат назначения ULONGLONG в 16-байтовый массив?

ULONGLONG passedValue; 
BYTE myArr[16]; 
memset(myArr, 0x00, sizeof myArr); 
*((ULONGLONG *) myArr) = passedValue; 

Хотя я понимаю, что вызов memset метод заполняет массив myArr байт (размером 16) с 0s, я «Не знаю, что делает последняя строка.

Согласно MSDN, ULONGLONG is 8 bytes ... тогда как myArr - 16 байт. Что будет в myArr после выполнения последнего оператора?

+0

Я не видел определения ** iv **. – David

+0

Какое отношение имеет myArr с passValue? –

+0

Извините, ребята .... Обновлено исходное сообщение выше. Последняя строка должна была быть * ((ULONGLONG *) myArr) = receivedValue; – user2869520

ответ

0

Этот термин (ULONGLONG *) myArr преобразует myArr в указатель на тип ULONGLONG.

Тогда *((ULONGLONG *) myArr) - это значение, на которое указывает указатель.

И

*((ULONGLONG *) myArr) = passedValue; 

назначает passedValue к первому 8 байт myArr BYTE массива.

passedValue 00 00 00 00 00 00 00 00 
^^^^^^^^^^^ 
8 bytes 
+0

Спасибо за быстрый ответ :). – user2869520

+0

@ user2869520: Добро пожаловать. – David