2016-12-10 36 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'写入的。 –