C言語のポインタの勉強をしていて行き詰ってしまったので質問させて頂きます。
下のプログラムを実行すると以下のような出力が得られた.
プログラム中の値(a),(b)及び出力値(c),(d)を10進数で答えよ。
該当のソースコード
C言語
ソースコード
#include <stdio.h>
int main(void)
{
int aa[2]={ (a) , (b)};
short *aa2=(short *)(&aa[sizeof(aa)/sizeof(short) - 3])‐2;
char aa3=(char )(aa+2)‐6;
int n;
for(n=0;n<4;n++)
printf(“%d, %d¥n”,n,(aa2+n));
for(n=0;n<3;n++)
printf(“%d, %d¥n”,n,(short *)(aa3+n));
}
出力結果
0, 20
1, (c)
2, (d)
3, ‐20
0, ‐1
1, 255
2, 0
試したこと
short型の*aa2は(short *)(&aa[sizeof(aa)/sizeof(short)-3])-2で定義されている、aaはint型が2つ分なので8バイト、short型が4バイトなので[]の中身はと8/2-3=1となると思います。ここでaa[1]を指しますが、さらにその後-2をします。short型なので2×2=4つ分のアドレスが引かれ結果的にaa[0]の先頭を指す。よって(a)には20を入れる?
とここまで考えたら行き詰ってしまいました、、、
どなたか詳しい方、ご教示いただけると大変助かります。
回答3件
あなたの回答
tips
プレビュー