【C言語】printfで使用できる書式”%p”について解説

この記事では、C言語のprintf関数で使用できる書式指定子%pについて解説します。

目次から探す

書式”%p”とは

C言語のprintf関数で使用できる書式指定子%pは、ポインタの値を表示するために使用されます。

ポインタはメモリ上のアドレスを指し示す変数であり、%pを使うことでそのアドレスを表示することができます。

ポインタの値を表示する

%pを使用すると、ポインタ変数の値が16進数で表示されます。

この値は、ポインタが指し示すメモリ上のアドレスを表しています。

例えば、以下のようなコードを考えてみましょう。

int* ptr;
int num = 10;
ptr = #
printf("ポインタの値: %p\n", ptr);

上記のコードでは、int型変数numのアドレスをポインタ変数ptrに代入しています。

そして、%pを使ってptrの値を表示しています。

実行結果は、ポインタ変数ptrが指し示すメモリ上のアドレスが16進数で表示されます。

ポインタのアドレスを表示する

%pを使用すると、ポインタ変数自体のアドレスを表示することもできます。

ポインタ変数自体もメモリ上のアドレスを持っており、%pを使うことでそのアドレスを表示することができます。

以下のコードを見てみましょう。

int* ptr;
printf("ポインタのアドレス: %p\n", &ptr);

上記のコードでは、int型ポインタ変数ptrのアドレスを%pを使って表示しています。

実行結果は、ポインタ変数ptr自体のアドレスが16進数で表示されます。

書式”%p”の使い方

書式指定子%pを使ってポインタの値やアドレスを表示する方法について説明します。

ポインタ変数の値を表示する

ポインタ変数の値を表示するには、printf関数の書式指定子として%pを使用します。

以下のコードを参考にしてみましょう。

int* ptr;
int num = 10;
ptr = #
printf("ポインタの値: %p\n", ptr);

上記のコードでは、int型変数numのアドレスをポインタ変数ptrに代入しています。

そして、%pを使ってptrの値を表示しています。

実行結果は、ポインタ変数ptrが指し示すメモリ上のアドレスが16進数で表示されます。

ポインタ変数のアドレスを表示する

ポインタ変数自体のアドレスを表示するには、printf関数の書式指定子として%pを使用します。

以下のコードを参考にしてみましょう。

int* ptr;
printf("ポインタのアドレス: %p\n", &ptr);

上記のコードでは、int型ポインタ変数ptrのアドレスを%pを使って表示しています。

実行結果は、ポインタ変数ptr自体のアドレスが16進数で表示されます。

書式”%p”の注意点

書式指定子%pを使用する際に注意が必要な点について説明します。

ポインタ変数がNULLの場合の表示

ポインタ変数がNULL(ヌルポインタ)の場合、%pを使って表示すると、nilという特殊な値が表示されます。

これは、NULLポインタがメモリ上のアドレス0を指し示すためです。

以下のコードを見てみましょう。

int* ptr = NULL;
printf("ポインタの値: %p\n", ptr);

上記のコードでは、int型ポインタ変数ptrにNULLを代入しています。

そして、%pを使ってptrの値を表示しています。

実行結果は、nilという値が表示されます。

ポインタ変数の型による表示の違い

ポインタ変数の型によって、%pを使って表示される値の形式が異なる場合があります。

例えば、以下のコードを考えてみましょう。

int* intPtr;
char* charPtr;
printf("int型ポインタの値: %p\n", intPtr);
printf("char型ポインタの値: %p\n", charPtr);

上記のコードでは、int型ポインタ変数intPtrchar型ポインタ変数charPtrの値を%pを使って表示しています。

実行結果は、int型のポインタ変数の場合は16進数で表示され、char型のポインタ変数の場合は文字列のアドレスが表示されます。

以上が、C言語のprintf関数で使用できる書式指定子%pについての解説です。

ポインタの値やアドレスを表示する際には、%pを適切に使って情報を表示することができます。

目次から探す