C言語のprintfにおける%pフォーマット指定子の使い方と役割
C言語には、%dや%sなど、さまざまなフォーマット指定子が用意されています。その中でも今回は、ポインタ型のデータを出力するためのフォーマット指定子「%p」について解説します。
%pとは何か
%pは、printf関数においてポインタ(メモリアドレス)の値を表示するために使用される変換指定子です。通常、アドレスは16進数形式で出力されます。具体的な動作を、以下のサンプルコードで確認してみましょう。
サンプルコード
#include <stdio.h>
int main(void) {
int x = 50;
int *ptr = &x; /* 変数xのアドレスをptrに格納 */
printf("The address is: %p, the value is %d", ptr, *ptr);
return 0;
}実行結果
The address is: 000000000022FE44, the value is 50
解説
このプログラムでは、まずint型の変数xに50を代入し、そのアドレスをポインタ変数ptrに格納しています。printfでは、%pによってptrが保持するアドレスが出力され、%dによって間接参照演算子*を使って取り出した値(50)が出力されます。
注意点
- 表示されるアドレスは実行環境やOS、コンパイラによって異なります。同じプログラムでも実行するたびに値が変わる場合があります。
- 移植性を高めるため、
%pで出力する際はポインタを(void*)にキャストすることが推奨されています(例:printf("%p", (void*)ptr);)。 - アドレスの出力形式(16進数かどうか、桁数など)は処理系依存です。
このように、%pはデバッグ時にポインタの中身(アドレス)を確認したい場合などに非常に便利なフォーマット指定子です。
-
C#の「is」キーワードとは?型チェックの使い方をわかりやすく解説
C#における 「is」キーワード は、あるオブジェクトが特定の型にキャスト(変換)できるかどうかを判定するために使用されます。演算の結果は bool 型(true / false)として返されます。継承関係にあるクラス同士では、派生クラスのオブジェクトは基底クラスの型として扱えるため true を返しますが、互換性のない型への変換は false となります。サンプルコードusing System; namespace DemoApplication{ class Program{ static void Main(){ Employee emp
-
C#のusingステートメントとは?使い方とリソースの自動解放を解説
C#のusingステートメントは、1つ以上のリソースを確保し、処理が完了した時点でそのリソースを自動的に解放するために使用されます。ファイル操作やデータベース接続など、明示的な後始末が必要な場面で特に役立ちます。usingステートメントの主な目的は、リソースを適切に管理し、すべてのリソースを自動的に解放することです。これにより、開発者が手動でDisposeメソッドを呼び出す必要がなくなり、リソースリークのリスクを大幅に減らすことができます。usingブロックを抜けるタイミングで、対象オブジェクトのDispose()メソッドが自動的に呼び出される点がポイントです。サンプルコード次の例では、Sys