以下の本当に単純なコードを考えてみましょう。
#include <stdio.h>
#include <stdlib.h>
int main() {
int* a = (int*) malloc(10 * sizeof(int));
printf("a = %p, a+1 = %p", a, a+1);
return 0;
}
出力は次のとおりです。
a = 0x127f190, a+1 = 0x127f194
anのサイズint
は4バイトなので、上記の結果から、ポインタ値はRAMメモリ上の1バイトのインデックスであると想定しています。したがってa+1
、実際にはの値が(バイト)増加しa
ますsizeof(int) = 4
。あれは正しいですか?
はいの場合、プログラムから32ビットのメモリアドレスを取得するのはなぜですか?このマシンは64ビットバージョンのUbuntuを実行している64ビットです。プログラムで完全な64ビットアドレスを出力するにはどうすればよいですか?特別なフラグを使用してコンパイルする必要がありますか?