0

C で文字列定数のアドレスを取得したいと思います。

 char * const MYCONST = "StringString";

私の知る限り、const はメモリのテキスト/コード セグメントに「保存」されます。MYCONSt の最初の要素のアドレスを取得しようとすると:

 printf("%p\n",&(MYCONST));

その結果、Text/Code セグメントではなくスタックにある 0x7fff15342e28 を取得します。Cで文字列定数のアドレスを取得するのを手伝ってくれる人はいますか?

//編集 今のところ正解が見つかりません:

  char * const MYCONST1 = "StringString";
  printf("Address of MYCONST1: %p\n",MYCONST1);

  char * const MYCONST2 = "StringString";
  printf("Address of MYCONST2: %p\n",(void*)MYCONST2);

これは出力です:

MYCONST1 のアドレス: 0x400b91

MYCONST2 のアドレス: 0x400b91

ただし、これらは異なる定数であるため、異なるアドレスを持つ必要があります。結果の長さが7であり、ロケール変数のように0x7fffa5dd398cではない場合、誰かが私を説明できますか?

ありがとう!

4

6 に答える 6

6

は既にポインターであるためMYCONST、アンパサンドは必要ありません。必要なのは へのキャストだけvoid*です%p:

printf("%p\n",(void*)MYCONST);

アンパサンドを使用すると、MYCONSTローカル変数のアドレスが出力されます (キャストも必要ですvoid*。そうしないと、アドレスが正しく出力されない可能性があります)。これは実際にはスタック上にあります。

于 2013-10-12T11:25:23.390 に答える
3
printf("%p\n",(void *) &MYCONST);

MYCONSTポインター変数のアドレスを出力します。

printf("%p\n", (void *) MYCONST);

MYCONSTポインター変数の値を出力します。

于 2013-10-12T11:25:45.817 に答える
1
char * const MYCONST = "StringString";

pointerMYCONSTを初期化し、この文字列リテラルが格納されているメモリを指すようにします。
この文字列のアドレスを出力するには、ポインターの値を使用します。

printf("%p\n", (void*) MYCONST);   

それ以外の

printf("%p\n", (void*) &MYCONST);

ポインター自体のアドレスを出力します。

于 2013-10-12T11:26:04.603 に答える
1

C文字列の最初の文字のアドレスは、文字列自体の変数にあります。つまり、あなたの場合はMYCONSTです。

于 2013-10-12T11:25:14.280 に答える
1
printf("%p\n",(void*)MYCONST);

MYCONST文字列ポイントの最初の要素のアドレスを出力します。

&前に出さなかった理由MYCONSTは、MYCONSTすでにポインタだからです。

を印刷する必要がある場合はaddress of Pointer、次のようにする必要があります&MYCONST

于 2013-10-12T11:29:38.673 に答える