使用引用和取消引用运算符读取代码行时遇到问题
Trouble reading line of code with reference & dereference operators
我无法阅读一系列*
和&
运算符,以便理解方法中的两个代码谎言。这些行是:
int dummy = 1;
if (*(char*)&dummy) { //Do stuff
}
尽我所能确定:
-
dummy
在堆栈上分配,其值设置为1
-
&dummy
返回dummy
正在使用的内存位置(即1
所在的位置) -
(char*)&dummy
将&dummy
转换为指向字符的指针,而不是指向 int 的指针 -
*(char*)&dummy
取消引用(char*)&dummy
,返回数值为1
的任何字符
这似乎是一个非常令人困惑的说法:
if (1){//Do stuuf }
我是否正确理解了这些台词?如果是这样,为什么有人会这样做(除了让我感到困惑)?
该代码当然不是可移植的,但显然是为了检测系统的字节序:int(1)
的非零位位于何处取决于系统是大端还是小端。在一种情况下,表达式的结果被假定为0
,在另一种情况下,它被假定为非零。不过,我认为无论如何这是未定义的行为。此外,理论上还有DS9k字节序,它完全使字节乱码(尽管我认为没有任何系统可以实际做到这一点)。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 编译包含字符串的代码时遇到问题
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 遇到新行时,有没有办法停止istream_iterator
- 布尔值是通过引用传递的,但我仍然在 cpp 中遇到编译错误
- 使用引用和取消引用运算符读取代码行时遇到问题
- 我正在处理一个 c++ 项目,但在通过引用传递 rect0 对象时遇到问题
- 在C++中使用指针和引用时遇到问题
- shared_ptrs是否会遇到由于引用计数器原子递增/递减而导致的缓存丢失?
- 我在使用ifndef时遇到问题.我得到错误:错误未定义的引用