C程序中的指针

C程序中的指针,c,pointers,C,Pointers,考虑C中的以下两个代码:- 第1代码:- int main() { int *a,*b; *a=1; } 第二代码:- int main() { int *a,*b; *a=1; *b=1; } 他们两人编译都没有错误。但是第一个跑,第二个不跑。有人能解释一下吗?它们都表现出未定义的行为:第一个运行的原因是默认情况下位于a中的指针指向内存中的某个区域,该区域写入时不会导致崩溃(这仍然是非法的)。您需要初始化指针以解决此问题: int *a = mall

考虑C中的以下两个代码:- 第1代码:-

int main()
{
    int *a,*b;
    *a=1;
}
第二代码:-

int main()
{
    int *a,*b;
    *a=1;
    *b=1;
}

他们两人编译都没有错误。但是第一个跑,第二个不跑。有人能解释一下吗?

它们都表现出未定义的行为:第一个运行的原因是默认情况下位于
a
中的指针指向内存中的某个区域,该区域写入时不会导致崩溃(这仍然是非法的)。您需要初始化指针以解决此问题:

int *a = malloc(sizeof(int));
int *b = malloc(sizeof(int));
*a = 1;
*b = 1;
free(a);
free(b);

这里,
a
b
有垃圾值(指向随机位置)。当您这样做时,
*a=1
,它将写入(覆盖)到它指向的任何位置[只要允许您访问它]。有时,这可能不起作用,并且您将得到一个
分段错误

该问题的原因是指针没有任何内存地址,因此您必须在使用它们之前提供合法的内存地址。顺便说一下,你的两个代码都是错误的。

像这样的问题太多了,你误解了指针的概念。你对指针了解多少???这是完全没有意义的…所以,你是说,第一个运行良好???时髦的未定义的行为。在不同的环境中做不同的事情。尽管我认为它不应该起作用,但它实际上起作用,这就是所谓的未定义行为。。它不能保证在所有平台上都能工作,甚至不能在您当前的平台上始终如一地工作。
    int *a,*b;
    *a=1;