使用引用和取消引用运算符读取代码行时遇到问题

Trouble reading line of code with reference & dereference operators

本文关键字:引用 遇到 取代码 问题 运算符 取消 读取      更新时间:2023-10-16

我无法阅读一系列*&运算符,以便理解方法中的两个代码谎言。这些行是:

int dummy = 1;
if (*(char*)&dummy) { //Do stuff
}

尽我所能确定:

  1. dummy在堆栈上分配,其值设置为 1
  2. &dummy返回dummy正在使用的内存位置(即1所在的位置)
  3. (char*)&dummy&dummy转换为指向字符的指针,而不是指向 int 的指针
  4. *(char*)&dummy取消引用(char*)&dummy,返回数值为 1 的任何字符

这似乎是一个非常令人困惑的说法:

if (1){//Do stuuf }

我是否正确理解了这些台词?如果是这样,为什么有人会这样做(除了让我感到困惑)?

该代码当然不是可移植的,但显然是为了检测系统的字节序:int(1)的非零位位于何处取决于系统是大端还是小端。在一种情况下,表达式的结果被假定为0,在另一种情况下,它被假定为非零。不过,我认为无论如何这是未定义的行为。此外,理论上还有DS9k字节序,它完全使字节乱码(尽管我认为没有任何系统可以实际做到这一点)。