二つのタイプ:C++の文字列リテラルの種類と宣言
char* str1 = "string 1";
と
char str2[] = "string 2";
私のコンパイラは私がconstのchar型からエラー 間違って変換して最初の宣言を使用することはできません。 [8]をchar *に変換する。大丈夫に見える、このような バージョン:コンパイラによって渡さ
const char* str1 = "string 1";
。
私の理解を明確にしてください。 私は、両方のバージョンを宣言すると、 main()、 最初のもの(const char *) - 唯一のポインタはスタックに割り当てられ、データセグメントのあるアドレスで初期化されます。 2番目のバージョン(char []) - シンボルの配列全体がスタックに置かれます。
文字列リテラルには常にconst char []型があります。 はconst char * depricatedを使用していますか? C互換のみのために?
ここで、各バージョンには文字列が格納されますか?
CとC++は異なる言語です!同じ行動を期待する理由は何ですか?これはCに関するものではありません。 – Olaf
これは面白いです、 '' string 1 ''は' const char [8] 'ではなく' const char [9] 'です。 – aschepler
@aschepler面白くない - 普通。 9文字を構成する末尾の0文字があります。 – Aconcagua