電子書籍の厳選無料作品が豊富!

ポインタと型のサイズについて、実験しています。

以下のプログラムを実行したときに、さらに下の
画面表示になるのですが、ここで疑問があります。

int型の配列を作ってそのポインタを表示しています。

i[0]のポインタ=0012FF38
i[1]のポインタ=0012FF3C

0012FF38 と 0012FF3C の間は16ビットなのに、
int型のサイズは4バイトとなってしまいます。

なぜでしょうか。

-------------プログラムここから--------------
#include <iostream>

using namespace std;

int main(){
int i[20];

for(int j = 0;j<20;j++){
printf("i[%d]のポインタ=%p\n",j, &i[j]);
}

printf("\n\nsizeof(int) = %d\n\n", sizeof(int));

return 0;
}
-------------プログラムここまで--------------




-------------画面出力ここから--------------
i[0]のポインタ=0012FF38
i[1]のポインタ=0012FF3C
i[2]のポインタ=0012FF40
i[3]のポインタ=0012FF44
i[4]のポインタ=0012FF48
i[5]のポインタ=0012FF4C
i[6]のポインタ=0012FF50
i[7]のポインタ=0012FF54
i[8]のポインタ=0012FF58
i[9]のポインタ=0012FF5C
i[10]のポインタ=0012FF60
i[11]のポインタ=0012FF64
i[12]のポインタ=0012FF68
i[13]のポインタ=0012FF6C
i[14]のポインタ=0012FF70
i[15]のポインタ=0012FF74
i[16]のポインタ=0012FF78
i[17]のポインタ=0012FF7C
i[18]のポインタ=0012FF80
i[19]のポインタ=0012FF84


sizeof(int) = 4
-------------画面出力ここまで--------------

A 回答 (1件)

i[0]のポインタ=0012FF38


i[1]のポインタ=0012FF3C
0012FF38 と 0012FF3C の間は16ビットなのに、
int型のサイズは4バイトとなってしまいます。

「0012FF38 と 0012FF3C の間は16ビットなのに、」
0012FF38 と 0012FF3C の間は32ビットです。
どこから16ビットの計算が出てきたのでしょう?
0012FF3C-0012FF38=4
で4バイトになっています。

この回答への補足

0012FF38 と 0012FF3C の間には
0012FF38 0012FF39 0012FF3A 0012FF3Bの4つがあり、
それぞれの末尾の8 9 A B を表現するためには、1つに
ついて、4ビットいるから4 * 4 = 16と計算していました。

今考えると、これは何を計算しているのだろうと
思います。。

0012FF3C-0012FF38=4で4バイトですね、
ご回答ありがとうございました。

補足日時:2007/04/28 13:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!