-5

重複の可能性:
char a[] = “string”; の違いは何ですか? および char *p = 「文字列」;

これらの違いは何ですか?^^

            //difference between:
            char* sz1 = "blah";
            char  sz2[] = "blah";

            //and also please explain these
            char *sz3 = new char[512];
            char *sz4[512] = { 0, };
            char sz5[512];
4

2 に答える 2

2

"blah"ですconst char [5]。最初の行で、その配列はポインターに減衰され、最初の要素へのポインターとして変数に格納されます。これは、const 文字を指す非 const 文字へのポインタでもあります。そのはず:

const char *sz1 = "blah";

2 番目 (jrok に感謝) では、実際の配列を作成し、 で初期化し{'b', 'l', 'a', 'h', '\0'}ます。

char *sz3 = new char[512];

512 * sizeof (char)これにより、文字にメモリのバイトが割り当てられsz3、先頭がポイントされます。これは、スタックではなくヒープに格納されるので、忘れないようにしdelete[]てください。

char *sz4[512] = { 0, };

これにより、文字への 512 個のポインターの配列が作成され、それらがすべて 0 (NULL) に初期化されます。コンマは必要ありません。後でイニシャライザ リストに追加する方が簡単です。ここで、スパイラル ルールを使用して を決定できますsz4 is an array of 512 (one right) pointers (one left) to char (two left)

char sz5[512];

これにより、512 文字の配列が (スタック上に) 作成されます。

最後から 2 番目を除くすべてを効果的に置き換えることができますstd::string

于 2012-06-12T20:05:41.187 に答える
-1

最初の 2 つの例は基本的に同じで、実行時にメモリが割り当てられた char ポインターです。

3 つ目は、512 バイト相当のメモリを割り当て、そのアドレスを sz3 に割り当てています。

4番目のものでは、512文字のポインタの配列を宣言していますが、(私の知る限り)割り当てが正しくありません。

最後に、5 番目のステートメントは 512 文字の配列を作成します。

于 2012-06-12T20:05:14.350 に答える