麻烦阅读代码行参考&解引用运算符

时间:2014-01-03 20:30:09

标签: c++ c pointers

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

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

我最好能确定:

  1. dummy在堆栈上分配,其值设置为1
  2. &dummy返回dummy使用的内存位置(即1所在的位置)
  3. (char*)&dummy&dummy强制转换为指向char的指针,而不是指向int的指针
  4. *(char*)&dummy取消引用(char*)&dummy,返回任何字符值为1的字符
  5. 这似乎是一种非常令人困惑的说法:

    if (1){//Do stuuf }
    

    我是否正确理解了这些线条?如果是这样,为什么会有人这样做(除了迷惑我)?

1 个答案:

答案 0 :(得分:1)

代码肯定不是可移植的,但显然是为了检测系统的字节顺序:int(1)的非零位取决于系统是大端还是小端。在一种情况下,表达式的结果假定为0,在另一种情况下,假设它是非零的。不过,我认为这是不确定的行为。另外,理论上还有DS9k的endianess,它完全把字节搞砸了(尽管我认为没有任何系统可以实现它)。