我不擅長高級C++腳本。我試圖找出更多關於下列變量分配的內容,但沒有成功。請解釋他們或給我一個來源去研究類似的陳述。需要幫助瞭解指針變量賦值
rand_seed = *(int*)input_buffer_ptr;
moving_input_ptr = (BYTE*)((int*)input_buffer_ptr + 1);
我不擅長高級C++腳本。我試圖找出更多關於下列變量分配的內容,但沒有成功。請解釋他們或給我一個來源去研究類似的陳述。需要幫助瞭解指針變量賦值
rand_seed = *(int*)input_buffer_ptr;
moving_input_ptr = (BYTE*)((int*)input_buffer_ptr + 1);
(考慮到int
是4個字節)
想象RAM作爲一個字節長線路(因爲它是):
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 |
Then:
(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);
你會得到一個字節變量值爲:
第一個表達式非常簡單:在int *'cast之後提取input_buffer_ptr指針的第一項。 'rand_seed'應該是'int'。 –