【发布时间】:2021-09-06 07:41:37
【问题描述】:
以下代码:
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
【问题讨论】:
-
这是未定义的行为。 “为什么”这个问题没有任何意义。
-
你有未定义的行为!你让
p指向单个变量a。这意味着p + 1和p + 2将超出范围。 -
至于实际发生的情况,不能保证您的编译器会按照声明的顺序存储变量。甚至按递增顺序。甚至它们甚至存储在某种“堆栈”中。
-
这个问题应该有一个规范的副本...
-
if 随机行代码 cout -- 未定义的行为是未定义的。当我在 Visual C++ 中以调试模式运行您的程序时,会引发运行时异常。所以问问你自己——你值得花时间尝试用糟糕的代码玩花样,还是花时间学习正确的 C++ 编程?