printf("%p",p);使い方のまとめ

1335 ワード

コンテンツ参照先:クリックしてリンクを開く
C言語でprintf関数を使用すると、%d,%c,%sなど、出力内容を異なるフォーマットで印刷できることを知っています.これらはよく知られています.
しかし、printf("%p",p)を見ることがあります.このような文では、%pはどういう意味ですか?
一緒に見てみましょう.
まずprintf("%p",p);p 2の内容をポインタとして出力することであり,pを出力するアドレスではなく,実際には出力16進数フォーマットとは差が少ない.任意の変数にはアドレスがあり、変数名がその内容(ポインタの内容はアドレスであり、ポインタタイプの内容ではなくchar、intなどである可能性がある)を指し、アドレスを取るには一般的に加算&、%pで印刷することができるが、ポインタは特に彼自身の内容がアドレスであるため、%pを印刷する場合、加算&が印刷されていないポインタの内容(中に保存されているアドレス)である場合、ポインタを付けて印刷する場合は、そのポインタの格納先(格納先)ではなく、そのポインタの格納先が印刷されます.
テストコードを見てみましょう.
#include 

int main(void)
{
	int a=8;
	int *p;
	int *p2;
	printf("%p
",&a); // a p=&a; printf("%p
",p); //p ( a ) printf("%p
",*p); // a printf("%p
",a); // a p2 = p; printf("%p
",p2); //p2 ( a ) printf("p=%p
",&p); //p printf("p2=%p
",&p2); //p2 printf("%d
",*p2); // a return 0; }

問:pポインタ自体のアドレスを印刷したい場合は、どう書きますか.答え:printf("%p",&p);問:p 2=pはどのように値をつけますか?答:pのポインタの内容(中に保存されているのはアドレス)はp 2に与えられます.問:p,p 2に格納されている内容(アドレス)は同じで、それらの2つのアドレスも同じですか?答え:異なる、彼らのアドレスを印刷することができます:printf("%p",&p);printf("%p",&p 2);比較してみましょう.