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

时间:2016-12-10 21:47:34

标签: c++ pointers

我不擅长高级C ++脚本。我试图找到更多有关以下变量赋值的信息,但没有成功。请解释一下或给我一个研究类似陈述的来源。

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

1 个答案:

答案 0 :(得分:2)

(考虑到RAM: .... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] .... 是4个字节)

想象一下RAM作为一长串字节(因为它是):

SOME_TYPE*

.... [8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit][8bit] .... ^ input_buffer_ptr 作为某个字节的指针:

int*

SOME_TYPE* input_buffer_ptr表示您将此指针下的数据视为整数(大小为4字节的数字)

所以如果你有指针(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  |

您将获得一个带有值的字节变量:

while (str.length() > i && str.charAt(i) >= '0' && str.charAt(i) <= '9') {
    result = result * 10 + (str.charAt(i) - '0');
    i++;
}