我不擅长高级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'。 –