teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

int == 4バイト、short == 2バイト、char == 1バイトです

2020/06/07 01:48

投稿

anmitsu_c
anmitsu_c

スコア1

title CHANGED
File without changes
body CHANGED
@@ -21,16 +21,16 @@
21
21
  }
22
22
 
23
23
  ### 出力結果
24
- 0, 51
24
+ 0, 20
25
25
  1, (c)
26
26
  2, (d)
27
- 3, ‐51
27
+ 3, ‐20
28
28
  0, ‐1
29
29
  1, 255
30
30
  2, 0
31
31
 
32
32
  ### 試したこと
33
- 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)には51を入れる?
33
+ 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を入れる?
34
34
 
35
35
  とここまで考えたら行き詰ってしまいました、、、
36
36
  どなたか詳しい方、ご教示いただけると大変助かります。