任何人都知道为什么会这样:
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);
}
我没有收到任何错误,但它不会运行!不明白为什么那一点点差异会导致它崩溃
任何人都知道为什么会这样:
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);
}
我没有收到任何错误,但它不会运行!不明白为什么那一点点差异会导致它崩溃
您的代码的行为未定义。它的行为没有逻辑。它本质上是随机的。试图分析为什么一些不相关的“微小差异”会改变你在实验中观察到的行为是浪费时间。
正如其他答案所示,您的两个程序都同样错误。
有很多方法可以使它正确。这里有2种方法。
int *i;
int j;
i = &j;
*i = 10;
int * i = malloc(sizeof(int));
*i = 10;
// After you are done with i
free(i);
是undefined bahavior。您已经创建了一个指针,并且没有初始化指针,而是直接将值放入10由指针指向的内存位置iwhere ihas indeterminate value。因此,在这种情况下,它将将该值放入该10垃圾值位置(指针的值i)。因此,如果垃圾值位置可访问,它可能会执行,或者如果内存位置不可访问,它可能会崩溃。
因此它只是undefined bahavior