任何人都知道为什么会这样:
int main(void)
{
char action;
int *i;
*i=10;
printf("%d",*i);
action='C';
printf("%c",action);
}
但这不是
int main(void)
{
char action='C';
int *i;
*i=10;
printf("%d",*i);
printf("%c",action);
}
我没有错误,但它不会运行!无法理解为什么这个小差异使它崩溃
答案 0 :(得分:4)
您的代码行为未定义。它的行为没有逻辑。它基本上是随机的。试图分析为什么一些不相关的“微小差异”会改变你在实验中观察到的行为,这是浪费时间。
答案 1 :(得分:2)
您的程序同样错误,如其他答案所示。
许多方法可以使其正确。这有两种方式。
int *i;
int j;
i = &j;
*i = 10;
int * i = malloc(sizeof(int));
*i = 10;
// After you are done with i
free(i);
答案 2 :(得分:1)
这是undefined bahavior
。
您已经创建了一个指针而没有初始化指针,您直接将值10
放到指针i
所指向的内存位置,其中i
具有indeterminate value
。所以,在这种情况下,它会将值10
放到该垃圾值位置(指针i
的值)。因此,如果垃圾值位置可访问,它可能会执行,如果无法访问内存位置,则可能会崩溃。
因此它只是undefined bahavior