C编程中的指针

use*_*466 0 c

int main(void) {
  int x = 0;
  char* p = (char*) &x;
  int k = 0;
  while (x != -1) {
    *p = -1;
    p = p + 1;
    k = k + 1;
  }
  printf("%d", k);
}
Run Code Online (Sandbox Code Playgroud)

我们已经使用char*p =&x将p设置为x的地址; 逻辑上,*p = -1应该在第一次迭代(k = 1)时替换x的值.实际上(或者当我在VS中运行代码时),需要4次迭代才能完成值赋值.为什么?并且因为*p = -1在每次迭代中执行,其他三个-1在哪里去?谢谢

Kei*_*all 7

替换char *pint *p.您的分配*p = -1只写1个字节,int是4个字节.

你的编译器应该生成一个警告,作为你的任务char *p = &x; 不是类型安全的.