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

回答編集履歴

1

簡潔な書き直しを追加

2019/11/18 07:58

投稿

rubato6809
rubato6809

スコア1382

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