繁体   English   中英

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

[英]Dereferencing value in variable as pointer address

为什么只有指针可以被取消引用。 当我们有一个字符指针时,说“ p”,然后执行“ * p”操作,这意味着去获取存储在p中的地址位置的内容。 最后,我们要问的是通过将该值作为地址来获取“某些值”的内容。

现在假设在某些体系结构中占用8个字节的整数指针“ p”。 假设“ 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 ++可以防止您意外地做一个地址无法做到的事情。 这是一个很大的优势。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM