【发布时间】:2021-06-10 14:41:28
【问题描述】:
谁能帮我理解这段代码(c)..
#include <stdio.h>
void main()
{
const int a =5;int b;
int *p;
p= (int *) &a;
b=a;
*p= *p +1;
printf(" value of p is = %d\n", *p);
printf(" value of b is = %d\n", b);
printf(" value of a is = %d\n",a);
}
结果是
: p 的值为 = 6
: b 的值为 = 5
: a 的值为 = 6
【问题讨论】:
-
此代码错误,因为它修改了
const变量。它可能会给出其他结果而不是此处显示的结果,甚至崩溃。 -
@interjay 解释这个ideone.com/3wfWlL
-
@BeshambherChaukhwan 未定义的行为意味着任何事情都可能发生,这就是为什么你得到的结果与 OP 不同。
-
嗯,所以这意味着任何事情都可能发生????酷
-
@BeshambherChaukhwan:从技术上讲,未定义的行为意味着编译器和运行时环境都不需要以任何特定方式处理这种情况。实际结果可能取决于平台、编译器、任何优化标志、周围代码、运行时环境等,不保证可重复或可预测。