[ad_1]
文字のメモリアドレスを知りたいのですが、何かに気づいて理解できません。
文字名[] = {“こんにちは”};
// 名前配列のメモリアドレスを見つけるために、これが私がしたことです
cout<<"名前のメモリアドレス[] は:"<<&名前[]<
// char h のメモリ アドレスを見つけたいとします || 充電
//だから、これはアドレスを見つけるために私がしたことです
cout<<"名前のメモリアドレス[0] is:"<< &(名前[0])<<エンドル;
//ここに問題があります。間違った結果が得られます。メモリ アドレスを取得する代わりに、”hello” が返されます。
// オンラインで調べたところ、名前のメモリ アドレスを見つけるためのこのトリックが見つかりました[0]
cout<<" name のメモリアドレス[0] is:"<
どなたか簡単に教えてください。 ありがとう
解決策 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);
ハロー;
Pointer で試してみると、これが起こりました。
しかし、理由は何ですか、わかりません。
誰でもそれを説明できますか?
[ad_2]
コメント