首页 > 解决方案 > 为什么“cout”以错误的顺序打印变量

问题描述

以下代码:

int main(){

  int a;
  int b;
  int c=0;
  int *p;

  p=&a;
  *p = 10;
  *(p+1) = 20;
  *(p+2) = 30;

  cout << a << " " << b << " " << c << endl;
 
  return 0;
}

给出输出:

10 30 20

解释 ?如果 c 未初始化 (int a,b,c;) 预期结果:10 20 30

标签: c++pointers

解决方案


这是完全未定义的行为。指针运算只允许在单个数组内部(甚至在结构成员之间,尽管一些编译器可能会容忍后者)。局部变量不形成数组。它们可能在内存中有任意位置。


推荐阅读