【解決方法】C++ で文字のメモリ アドレスを見つけるにはどうすればよいですか?

プログラミングQA


文字のメモリアドレスを知りたいのですが、何かに気づいて理解できません。

文字名[] = {“こんにちは”};

// 名前配列のメモリアドレスを見つけるために、これが私がしたことです

cout<<"名前のメモリアドレス[] は:"<<&名前[]< 名前配列

// char h のメモリ アドレスを見つけたいとします || 充電
//だから、これはアドレスを見つけるために私がしたことです

cout<<"名前のメモリアドレス[0] is:"<< &(名前[0])<<エンドル;
//ここに問題があります。間違った結果が得られます。メモリ アドレスを取得する代わりに、”hello” が返されます。

// オンラインで調べたところ、名前のメモリ アドレスを見つけるためのこのトリックが見つかりました[0]

cout<<" name のメモリアドレス[0] is:"<(&(名前[0])<<エンドル; &(name の通常のアプローチの理由がわかりません[0]) dint 仕事と static_cast(&(name) の意味は何ですか[0])そしてそれは何をしますか?
どなたか簡単に教えてください。 ありがとう

解決策 1

あなたが持っているのは文字の配列です。 name[0] 最初の文字を返し、 &name[0] その文字へのポインタ(メモリアドレス)を返します( char*)、ご想像のとおりです。
しかし、何が起こっているのですか cout と解釈しています char* 文字列として、アドレスの代わりに文字を出力します。

使用して見つけたトリック static_cast 近いですが、重要な部分が欠けています-キャストするタイプ、目的はキャストすることです char*void* となることによって cout 文字列として扱いません。

char name[] = "Hello";
cout<<"the memory address of name[0] is:"<<static_cast<void*>(&name[0])<<endl;

さまざまなタイプのキャストの詳細については ( static_cast だけではありません) http://www.cplusplus.com/doc/tutorial/typecasting/[^]

解決策 2

文字名[]= “こんにちは”;

cout<<"&name の値[0] は: "<<&名前[0];
cout<<"\n----------\n";
cout<<"&(名前の値[0]) は : "<< &(名前[0]);
cout<<"\n----------\n";
char* ptr0=&name[0];
cout<<"ptr0 = &name 内のアドレス[0] : "<<&(ptr0);
cout<<"\n----------\n";
char* ptr1=&name[1];
cout<<"ptr1 = &name 内のアドレス[1] : "<<&(ptr1);
cout<<"\n----------\n";
char* ptr2=&name[2];
cout<<"ptr2 = &name 内のアドレス[2] : "<<&(ptr2);
cout<<"\n----------\n";
char* ptr3=&name[3];
cout<<"ptr3 = &name 内のアドレス[3] : "<<&(ptr3);
cout<<"\n----------\n";
char* ptr4=&名前[4];
cout<<"ptr4 = &name 内のアドレス[4] : "<<&(ptr4);

C++

ハロー;
Pointer で試してみると、これが起こりました。
しかし、理由は何ですか、わかりません。
誰でもそれを説明できますか?

コメント

タイトルとURLをコピーしました