正在将变量中的值取消引用为指针地址
Dereferencing value in variable as pointer address
为什么只有指针才能被取消引用。当我们有一个字符指针,比如"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++可以防止你意外地做一些用地址无法做的事情。这是一个非常大的优势。
相关文章:
- C++取消引用指针.为什么会发生变化
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 取消引用运算符不能重载
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- C++ 关于指针取消引用的技术问题
- 没有取消引用/解包对象的标准方法?
- 列表 iter 不取消引用 使用列表进行插入排序
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 取消引用结束指针到数组类型的一个
- 取消引用向量时出现问题
- 取消引用指向整数的指针时获得不同的结果
- C++:取消引用十六进制值,有点语法问题
- C/C++ 取消引用错误:在空检查之前取消引用
- 取消引用后C++空测试
- 立即取消引用unique_ptr
- 如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?
- 取消引用 void 指针以将值分配给结构
- boost_multi_index迭代器取消引用给出常量
- 为什么"std::uninitialized_copy"通常取消对未初始化内存的迭代器的引用不是未定
- 矢量迭代器不能与 std::shared_ptr<> 取消引用