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

时间:2015-12-09 20:55:44

标签: c++ c pointers

为什么只能指针取消引用。当我们有一个字符指针,让我们说“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”的值。

2 个答案:

答案 0 :(得分:4)

可以执行*(int*)x,它会在内存位置int获取x。我认为这在C标准中是正式支持的,但在实践中通常适用于大多数实现。

类型系统的部分要点是阻止你犯错误。 通常你不想取消引用uint64_t,所以如果你这样做可能是因为你弄错了,编译器会指出你的错误

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

答案 1 :(得分:0)

因为C ++不是汇编语言。在汇编中,您可以使用寄存器执行任何操作 - 您可以“取消引用”'它们(用作间接操作数)或乘法。芯片也不在乎。

C ++作为一种高级语言,旨在帮助开发人员。如果你想要某些东西是一个不可改变的地址,你可以这样输入它,而C ++可以防止你意外地做一些你可以用地址做的事情。这是一个非常大的优势。