回答編集履歴

1

簡潔な書き直しを追加

2019/11/18 07:58

投稿

rubato6809
rubato6809

スコア1382

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 了解。キャストすればよいと思います。
5
+ 了解。キャストすればよいと思います。たぶんこれで当面の対策になると思います。
6
6
 
7
7
 
8
8
 
@@ -10,8 +10,20 @@
10
10
 
11
11
  int *i1; // NULLで初期化する必要無し
12
12
 
13
- i1 = (int*) &data[1]; // キャスト
13
+ i1 = (int*) &data[1]; // キャストする
14
14
 
15
15
  printf("%d",*i1);
16
16
 
17
17
  ```
18
+
19
+ <stdint.h> がインクルードできる環境なら ``` int16_t ``` 型が使えるはずで、int16_t が良いけど、それが使えない環境なら short 型を使うのが良いかもしれない。かなり多くのコンパイラが16bit整数はshort型でアクセスできます。
20
+
21
+ それを踏まえて上記を簡潔に書き直すなら、こうです。もはやポインタ変数は不要です。
22
+
23
+ ```C
24
+
25
+ printf("%d", *(short*) &data[1]);
26
+
27
+ ```
28
+
29
+ data[1] のアドレスを **short 型のアドレスとみなす**、そしてそこの値を読みだす、というような意味になります。