C言語の勉強をしているものです.
アドレスの勉強中にふと疑問に思ったことがあったので,
テスト用にプログラムを作成しました.
以下のプログラムを実行した結果になります.
char:h,hex(68),address:6f16db23,
char:o,hex(6f),address:6f16db24,
char:g,hex(67),address:6f16db25,
char:e,hex(65),address:6f16db26,
char:,hex(0),address:6f16db27,
val: 123,address:6f16db18,
val: 456,address:6f16db1c,
size:8
size:1
size:8
size:4
配列の先頭アドレスに1を加算した結果がchar配列とint配列で違いがでました.
char1つ1バイト,int1つ4バイトなのでこのような結果になるとは思うのですが,
それぞれアドレスに1ずつ加算しているにも関わらず,なぜ違いがでるのでしょうか?
6f16db18に1を加算したら6f16db19になるのではないかと思います.
#include<stdio.h>
int main(void) {
char hoge[5] = "hoge";
int baz[2] = {123,456};
int i;
for(i = 0; i < 5; i++) {
printf("char:%1c,hex(%x),address:%x,\n", *(hoge + i), *(hoge + i), hoge + i);
}
for(i = 0; i < 2; i++) {
printf("val:%4d,address:%x,\n", *(baz + i), baz + i);
}
printf("size:%d\n", sizeof(char*));
printf("size:%d\n", sizeof(char));
printf("size:%d\n", sizeof(int*));
printf("size:%d\n", sizeof(int));
return 0;
}