4

重複の可能性:
宣言とmallocの違い

これら2つのプログラムに違いはありますか?

int main(void) {
    char str[80];
}

int main(void) {
    char * str = (char*) malloc( sizeof(char) * 80 );
}

mallocでは、usingと配列のような構文には違いがありますか?したがって、80文字のメモリが必要な場合mallocは、他の可能性ではなく、使用する必要があります。

自分の質問に答えてみます!

4

3 に答える 3

7
char str[80];

スタックに80バイトを割り当てます。str範囲外になると、これは自動的に回収されます。

char * str = (char*) malloc( sizeof(char) * 80 );

ヒープに80バイトを割り当てます。このメモリは、を呼び出すまで使用できますfree

2番目のケースは次のように簡略化できることに注意してください

char * str = malloc(80);

mallocつまり、Cでリターンをキャストするべきではなく、sizeof(char)1であることが保証されています。

于 2012-12-14T11:58:59.793 に答える
2

1つ目はスタックに割り当てられ、変数がスコープ外になると解放されます。ヒープ上の2番目であり、明示的にfree()されている必要があります。

どちらもポインタとして渡すことができます。

于 2012-12-14T11:58:06.203 に答える
2

前者の場合、スタックに80文字を割り当て、後者の場合、ヒープにメモリを割り当てます。

どちらもポインタとして使用でき、関数に渡すことができます。また、どちらも配列のインデックス構文で使用できます。

于 2012-12-14T11:58:45.197 に答える