C言語の変数のメモリ表現を表示する方法
本記事では、C言語の変数がメモリ上でどのように表現されているかを表示する方法を解説します。整数(int)、浮動小数点数(float)、ポインタの3種類について、それぞれのバイト単位のメモリ内容を出力してみましょう。
変数の内部表現を確認することで、エンディアン(バイトオーダー)やデータ型ごとのサイズなど、低レベルな挙動への理解を深めることができます。
解決の手順
この問題は、以下の手順に従って解決します。
- 対象となる変数のアドレスとサイズを取得する
- そのアドレスを
unsigned char *型にキャストし、バイト単位でアクセスできるようにする - 変数のサイズ分だけループ処理を行い、キャストしたポインタが指す各バイトの値を16進数で出力する
なぜ char ポインタを使うのかというと、C言語において char 型は1バイトであることが保証されており、任意のオブジェクトをバイト列として読み取るための標準的な手段だからです。
サンプルコード
#include <stdio.h>
typedef unsigned char *byte_pointer; // char* を使ってバイトポインタを定義
void disp_bytes(byte_pointer ptr, int len) {
// バイトポインタを受け取り、メモリ内容を表示する
int i;
for (i = 0; i < len; i++)
printf(" %.2x", ptr[i]);
printf("\n");
}
void disp_int(int x) {
disp_bytes((byte_pointer) &x, sizeof(int));
}
void disp_float(float x) {
disp_bytes((byte_pointer) &x, sizeof(float));
}
void disp_pointer(void *x) {
disp_bytes((byte_pointer) &x, sizeof(void *));
}
main() {
int i = 5;
float f = 2.0;
int *p = &i;
disp_int(i);
disp_float(f);
disp_pointer(p);
disp_int(i);
}実行結果
05 00 00 00 00 00 00 40 3c fe 22 00 00 00 00 00 05 00 00 00
結果の解説
この出力から、いくつか重要なポイントを読み取ることができます。
- 整数 5 の場合:「05 00 00 00」と表示され、最下位バイトが先頭に来ています。これはリトルエンディアン環境(多くのx86系CPU)で実行されたことを示しています。ビッグエンディアンの環境では「00 00 00 05」と表示されます。
- float 2.0 の場合:IEEE 754形式では 2.0 は「0x40000000」で表されますが、リトルエンディアンのため「00 00 00 40」という並びになります。
- ポインタの場合:環境によってアドレス値は異なり、64bitシステムでは8バイトで表示されます。
このように、変数をバイト単位でダンプすることにより、データ型の内部構造やマシン固有のメモリ配置を直感的に把握できます。デバッグやシリアライズ処理の学習にも役立つテクニックなので、ぜひ試してみてください。
-
Matplotlibのプロット凡例にテキストラベルだけを表示する方法
Matplotlibでプロットの凡例にテキストラベルだけを表示したい場合は、legend()メソッドにhandlelength=0、handletextpad=0、fancybox=Trueといった引数を指定します。これにより、通常は凡例の左側に表示される線やマーカーなどのハンドル(サンプルグラフィック)が非表示になり、ラベルのテキストのみがすっきりと表示されます。手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用してランダムな x および y のデータポイントを作成します。subplots()メソッドを使って、図とサブプロットのセットを作成しま
-
Excelグラフで2つの変数の関係を可視化する方法|散布図と相関係数の使い方
ビジネスや科学の分野では、必要な対策を講じるために将来の結果を予測することがよくあります。そのためには、まず変数同士の関係性を把握しておくことが重要です。この記事では、Excelのグラフで2つの変数間の関係を表示する方法を、手順を追ってわかりやすく解説します。この記事の手順に従えば、誰でも簡単にExcelで2つの変数の関係をグラフ上に表現できるようになります。それでは早速、解説を始めましょう。 練習用ファイルのダウンロード 練習用のブックはこちらからダウンロードできます。 2つの変数間の相関とは? 2つの変数の間にある関係は、一般的に「相関」と呼ばれます。これは、変数同士がどれほど強く結び