0

私は、以下が悪いプログラミング慣行であることを知っています

char * p1 = "myBad"  ;  

const "myBad" メモリが非 Const pointer によってポイントされるため、上記は悪いです。コンパイラは、p1 as が C との後方互換性をサポートできるようにします

次も悪い習慣ですか?

char p2[]="myBadORGood";

p1 と p2 の違いは何ですか。コンパイラは p2 の非 const コピーを作成しますか? p2は問題ないとどこかで読んだと思いますが、よくわかりません..

4

2 に答える 2

3

p2は文字列リテラルで初期化されます。つまり、文字列リテラルのコピーなので、- でなくp2てもconst問題ありません。

char p2[]="myGood";
于 2013-05-24T15:54:16.183 に答える
0

最初のものは悪い習慣であるだけでなく、C++ (C++03; chris のコメントによると、これはC++11 では現在でも違法です) で廃止されています。

文字列リテラルは、新しい独立した配列を初期化するための (読み取り専用) "モデル" としてのみ使用されます。したがって、短い

char arr[] = "abc";

は長い方に相当します

char arr[] = { 'a', 'b', 'c', '\0' };

次のように書くこともできます。

char arr[4];
arr[0] = 'a';
arr[1] = 'b';
arr[2] = 'c';
arr[3] = '\0';

(しかし、そのようなコードを書かないでください! ^^)

于 2013-05-24T17:47:26.600 に答える