K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>>>この時、ip はポインタ(型の変数)ですよね? ですから、ip+2、すなわち、 >>>ポインタ(型の変数の値)に2加算したポインタ『値』は、あくまで2しか増えて >>>いないじゃない!、と僕は思ったわけです。 >> >>うーん、『「ポインタ型の値」は、実際にはメモリのアドレスのことです』と >>p.43には書いてあるわけで、その意味では一貫していると思うのですが…… >> >>ip+1としたとき、それはもちろん配列の添字として考えれば1しか増えてないですし、 >>引き算すれば1になりますが、図を描いて矢印が動く距離を見てみれば、 >>「そのポインタが指す型のサイズ分だけ」動いている、と思うのですが。 > >僕の混乱の原因は、ここにありまして… > >List 1-4array2.c を、ちょっとだけ変更した次のもの > >#include <stdio.h> > >int main(void) >{ > int array[5]; > int *p; > int *p0=&array[0], *p1=&array[1]; > int i; > > /* 配列arrayに値を設定 */ > for (i = 0; i < 5; i++) { > array[i] = i; > } > > /* その内容を表示 */ > for (p = &array[0]; p != &array[5]; p++) { > printf("%d %p\n", *p, p); > } > > printf("p1-p0: %d, %p\n", p1-p0, p1-p0); > > return 0; >} > >を走らせた結果は > >0 0x7ffc25766960 >1 0x7ffc25766964 >2 0x7ffc25766968 >3 0x7ffc2576696c >4 0x7ffc25766970 >p1-p0: 1, 0x1 > >となり、『pには1しか足していないのに(p+=1としても当然同じ)、それを表示 >させるとなぜ4ずつ増えている? どこにマジックがある?』という当惑です。 >(1足した筈なのに、4増えちゃった? でも、p1とp0の差は、あくまで、1!) > >コンパイラが密かに(いえ、きちんと被参照型のサイズを考えて)計算して正しい >値(アドレス)に置き換えてくれてる、ということなのですかね(でしょうね)?
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!