だから私は文字へのポインタを指し示し、次にこの奇妙なことを出力するようにアドレスを出力したい:t + a。どんな助け?ポインタへのポインタを指す方法
#include <iostream>
using namespace std;
int main() {
char a = 't';
char* p = &a;
cout << p;
return 0;
}
だから私は文字へのポインタを指し示し、次にこの奇妙なことを出力するようにアドレスを出力したい:t + a。どんな助け?ポインタへのポインタを指す方法
#include <iostream>
using namespace std;
int main() {
char a = 't';
char* p = &a;
cout << p;
return 0;
}
あなたはcout
を文字列として解釈しようとchar*
タイプを、印刷しています。
プリントポインタの値用いて(アドレスが指す):
cout << (void *)p;
-- OR --
cout << static_cast<void *>(p);
問題はchar *
は、従来だけchar
へのポインタとして使用されていないことであり、それだけにはポインタ代わりにnull-terminated C-stringcout
will then print all the characters pointed to by p
until it finds a '\0'
となるので、t
が表示され、無効なメモリが印刷されます。このメモリは、ごみなどのクラッシュや印刷を行う未定義の動作です。
この問題を解決するには、void *
またはconst void *
を代わりに使用します。これは、アドレスが付いていて、型情報が添付されていないポインタです。 void *p = &a;
は1つの修正となります。 void *p2 = p;
を使用し、std::cout << p2;
を使用すると、別のものになります。 (void *)p
のようなCキャストの代わりにstatic_cast<const void*>(p)
のようなC++キャストを使用する必要があることを除けば、他の答えに示すようにキャストを使用することもできます。それ以外の場合は、ヌル終端文字列として扱われます
あなたはポインタのアドレスが必要な場合は、どちらかのポインタ
std::cout << (void *)p;
または%pオプション
printf("%p", p);
でprintf
を使うが無効にキャストし、そのそうではない。
どうしたのですか?何かエラーがありますか?あなたは何を期待していますか?あなたの投稿は不完全です、私たちはあなたを助けることはできません。 – informaticienzero
'cout <<(void *)p;'または 'cout << * p;'のどちらかを出力するかどうかは、表示する内容によって異なります。 – user0042
私はその文字のアドレスを見たい – Johan