需要帮助理解指针变量赋值

3

我不擅长高级C++脚本。我试图找出下面的变量赋值更多的信息,但没有成功。请解释一下它们或给我一个类似语句的学习来源。

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

第一个表达式非常简单:在将input_buffer_ptr指针转换为int *之后,提取第一个项目。rand_seed应该是一个'int'。 - J. Piquard
1个回答

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* 表示您将此指针下的数据视为整数(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);

您将获得一个值为:

.... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] ....
                                   |  a  |

非常感谢@Yevhen Kuzmovych提供如此详细的答案。 - Factor
注意:除非缓冲区最初是通过 int 写入的,否则这是未定义行为(严格别名违规)。 - M.M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接