web-dev-qa-db-ja.com

const char *はメモリアドレスへのポインタをどこで取得しますか?

これは簡単な質問かもしれませんが、なぜconst char *が指すメモリアドレスを必要としないのですか?

例:

const char* a = "Anthony";

ではなく:

const char *a = // Address to const char

他のタイプと同じように?

24
Weidelix

「なぜconst char*はメモリアドレスへのポインタを必要としないのですか?」

実際、It doesを指すメモリアドレスが必要です。

const char* aは、aが文字列リテラルまたは文字定数へのポインターであることを意味します。

ポインタalwaysは、メモリ内の特定のオブジェクトを指すポインタの性質であるため、指すアドレスが必要です。したがって、aおよびconst charへの他のポインターも同様です。

次のような割り当てによる"Hi My Name is Alfred!"のような文字列リテラル:

const char* a;
a = "Hi My Name is Alfred!";

文字列リテラルの最初の要素のアドレスへのポインタに減衰します。

次に、aは、文字列リテラル"Hi My Name is Alfred!"の最初の要素のアドレスによって割り当てられます。これは、実行環境に応じてメモリ内の任意の場所に格納できます。

それは、文字列リテラルが正確に格納されるプログラマーの力ではありません。割り当ては、それぞれのポインタを適切に割り当てて処理することだけです。