2016-12-10 66 views
3

我不擅長高級C++腳本。我試圖找出更多關於下列變量分配的內容,但沒有成功。請解釋他們或給我一個來源去研究類似的陳述。需要幫助瞭解指針變量賦值

rand_seed = *(int*)input_buffer_ptr; 
moving_input_ptr = (BYTE*)((int*)input_buffer_ptr + 1); 
+0

第一個表達式非常簡單:在int *'cast之後提取input_buffer_ptr指針的第一項。 'rand_seed'應該是'int'。 –

回答

2

(考慮到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); 

你會得到一個字節變量值爲:

+0

@John Kugelman,非常感謝評論。 – Factor

+0

非常感謝@Yevhen Kuzmovych。 – Factor

+0

注意:這是未定義的行爲(嚴格別名違規),除非緩衝區最初也是通過'int'寫入的。 –