3

私は配列とポインタで本当に混乱しています。
次の 2 つのコードの違いを教えてください。

int main()
{
    int i,*p;
    for(i=0;i<5;i++)
    {
        p[i]=i;
        printf("%d",p[i]);
    }
return 0;
}

int main()
{
    int i,p[5];
    for(i=0;i<5;i++)
    {
        p[i]=i;
        printf("%d",p[i]);
    }
return 0;
}
4

2 に答える 2

4

最初pにガベージの場所(割り当てられていない)を指していますが、あなたがそれを使用している方法でセグメンテーション違反が発生すると確信しています。次のように、使用する前に最初にメモリを割り当てる必要があります。

p = malloc(5 * sizeof(int))

Second はスタックに割り当てられ、宣言されているスコープの有効期間があります。

于 2013-07-05T12:28:18.577 に答える