2017-10-26 11 views
-1

だから私は文字へのポインタを指し示し、次にこの奇妙なことを出力するようにアドレスを出力したい:t + a。どんな助け?ポインタへのポインタを指す方法

#include <iostream> 

using namespace std; 

int main() { 

char a = 't'; 
char* p = &a; 

cout << p; 

return 0; 
} 
+0

どうしたのですか?何かエラーがありますか?あなたは何を期待していますか?あなたの投稿は不完全です、私たちはあなたを助けることはできません。 – informaticienzero

+0

'cout <<(void *)p;'または 'cout << * p;'のどちらかを出力するかどうかは、表示する内容によって異なります。 – user0042

+0

私はその文字のアドレスを見たい – Johan

答えて

5

あなたはcoutを文字列として解釈しようとchar*タイプを、印刷しています。

プリントポインタの値用いて(アドレスが指す):

cout << (void *)p; 
-- OR -- 
cout << static_cast<void *>(p); 
3

問題は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++キャストを使用する必要があることを除けば、他の答えに示すようにキャストを使用することもできます。それ以外の場合は、ヌル終端文字列として扱われます

0

あなたはポインタのアドレスが必要な場合は、どちらかのポインタ

std::cout << (void *)p; 

または%pオプション

printf("%p", p); 

printfを使うが無効にキャストし、そのそうではない。

関連する問題