コンテストの質問紙でこのプログラムを見つけました。
#include <iostream>
void main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int *ptr = (int*)(&a + 1);
printf("%d %d ",*(a + 1), *(ptr - 1));
}
出力は2 5
5 行目を and に変更するint *ptr=(int*)(&a);
とprintf("%d %d ",*(a + 1), *(ptr));
出力は次のようになります2 1
最初のケースでptr
は の最後のアドレスを取得array+1
し、2 番目のケースptr
では配列の同じアドレス ( のアドレスa
) を取得しました。
ptr
私の疑問は、 a がインクリメントされて割り当てられたときと、インクリメントせずにa
割り当てられたときに、この割り当てが異なる種類の動作を示すのはなぜptr
ですか?