正在将变量中的值取消引用为指针地址

Dereferencing value in variable as pointer address

本文关键字:引用 取消 指针 地址 变量      更新时间:2023-10-16

为什么只有指针才能被取消引用。当我们有一个字符指针,比如"p",我们做一个"*p"操作时,这意味着去获取存储在p中的地址位置的内容。最后,我们在这里要求的是通过将该值视为地址来获取"特定值"的内容。

现在假设一个整数指针"p"在特定的体系结构中占用8个字节。假设"p"包含一个整数变量"a"(int*p=&a)的地址。现在,如果我有一个大小为uint64_t的变量"x",那么这个变量基本上可以容纳8个字节的数据。即"memcpy(&x,&p,8)",我正在将存储在"p"中的地址位置复制到"x"。在c编程中,我们可以使用"*p"来取消对指针的引用,从而得到"a"的值。为什么我们不能做像*((int*)x)这样的事情并得到"a"的值。

可以执行*(int*)x,它将在内存位置x获取int。我认为这在C标准中没有得到官方支持,但在实践中,通常适用于大多数实现。

打字系统的部分目的是防止你犯错误通常您不想取消引用uint64_t,所以如果您这样做,可能是因为您犯了错误,编译器会为您指出错误。

顺便说一下,uintptr_t是一个与指针大小相同的无符号整数类型。如果您希望能够在另一个CPU体系结构上运行代码,请不要依赖uint64_t与指针大小相同。

因为C++不是汇编语言。在汇编中,您可以对寄存器执行任何操作——您可以"取消引用"它们(用作间接操作数)或相乘。奇普毫不在乎。

C++作为一种高级语言,旨在帮助开发人员。如果你想让某个地址成为一个不可引用的地址,你可以这样键入它,C++可以防止你意外地做一些用地址无法做的事情。这是一个非常大的优势。