回答編集履歴
1
簡潔な書き直しを追加
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 型のアドレスとみなす**、そしてそこの値を読みだす、というような意味になります。
|