(Учитывая, что int
4 байта)
Imagine ОЗУ в виде длинной строки байт (потому что):
RAM: .... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] ....
и SOME_TYPE*
как указатель на некоторых байтах:
.... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] ....
^
input_buffer_ptr
int*
означает, что вы обрабатываете данные под этим p ointer как целое число (число размером 4 байта)
Так что если у вас есть указатель SOME_TYPE* input_buffer_ptr
(int*)input_buffer_ptr; // casts this pointer to int*,
//so now you treat data under this pointer as 4 bytes integer
затем:
*(int*)input_buffer_ptr; // operator * before pointer gets data under
//that pointer, in this case, integer (4 bytes).
Так rand_seed
является целым числом и имеет значение:
.... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] ....
| random_seed |
Затем:
(int*)input_buffer_ptr + 1
// ^ ^
// casting to int* moving pointer to size of int (4 bytes)
Итак:
.... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] ....
^
((int*)input_buffer_ptr + 1)
И потом:
(BYTE*)((int*)input_buffer_ptr + 1);
//^
// casting pointer to BYTE*, so it points to the same place
// but now treated as one byte pointer.
так что если вы попытаетесь это сделать:
BYTE a = *(BYTE*)((int*)input_buffer_ptr + 1);
вы получите одну переменную байт со значением:
Первое выражение довольно просто: извлеките первый элемент указателя 'input_buffer_ptr' после' int * 'cast. «Rand_seed» должен быть «int». –