0
int main(void) {
  int x = 0;
  int* p = &x;
  char* q = p;
  while (*p == *q) { //What happens here?
     x = x + 1;
  }
  printf(“%d\n”, x);
}

好吧,我在这里有这个简单的程序。我对这是如何工作的感到困惑。如果你能帮助我,我将不胜感激。

我有一个测试,想了解它是如何工作的。先感谢您。

Q 指针问题

|-----------------------------|
               0x00<-------------Q点在这里?
|-----------------------------|
               0x00
|-----------------------------|
               0x00
|-----------------------------|
               0x00<-------------Q点在这里?
|-----------------------------|

所以在 x = x+1 之后。是吗?

|-----------------------------|
               0x00<-------------0x01 在这里?
|-----------------------------|
               0x00
|-----------------------------|
               0x00
|-----------------------------|
               0x00<-------------0x01 在这里?
|-----------------------------|

4

2 回答 2

3

它取决于字节顺序,但本质上是:

while (x == ((char) x)) {
    ++x;
}

循环将终止一次((int) x) != ((int) lowest byte of x)

于 2012-09-23T00:53:30.720 回答
1

首先,p并被q取消引用(通过 *)以获取它们指向的 int 和 char。然后,将 char 提升为 int,并比较这些值是否相等。

于 2012-09-23T00:51:51.933 回答