1. ホーム
  2. c++

[解決済み] const char[] と const char* の違い

2022-02-14 19:01:52

質問事項

そこで この記事 のような文字列リテラルの宣言の使用について説明しています。 const char* foo = "foo" という主張で終わっています。

const char *foo = "foo";
は、ほとんどの場合、必要ありません。代わりに、次のいずれかの形式を使用します。

  • エクスポートされる文字列の場合。
    const char foo[] = "foo";
  • 同じソースファイル内で使用されることを意味する文字列の場合。
    static const char foo[] = "foo";
  • 同じライブラリの複数のソースファイルにまたがって使用されることを意図した文字列の場合。
    __attribute__((visibility("hidden"))) const char foo[] = "foo";

ここでの私の理解は const char* const foo = "foo" と同等です。 const char foo[] = "foo" これは、C 言語の文字列ポインタの話であり、他のものを指すように変更することはできないからです。 const char* foo = "foo" は、他の任意のC-Stringを指すために使用される可能性があります。

これは正確なあらすじでしょうか?常に const char* const または const char[] ?

解決方法は?

として Thomas Matthewsの回答 には const char*const char* const はポインタであり const char[] は配列です。

しかし、正当化されるように ここで ポインターを使用した場合、3つの問題があります。

  1. ポインターを格納するためのメモリが必要
  2. ポインタが発生するインダイレクトが必要です。
  3. ポインタは、配列の終了ポインタまたは配列サイズを別途格納する必要があります。

最終的にはリンク先で正当化されるように。

単純に言うと、変数を宣言するときは const char[] .