2017-12-02 8 views
-2

これは私の最初の質問です。 現在、このコードの動作を理解しようとしています。 基本的には、タイプuint8_tの "hv"という名前の配列に特定の値を割り当てる必要があります。 私はこのキャストが何をしているか、それがどのように機能するのかよくわかりません。このキャストは何を割り当てますか? Cスタイルキャスト

for (i = 0; i < 4; i++) { 
    hv[i] = *(uint16_t *)(h1 + 8 + i * 2); 
} 

私はuint16_tポインタに第二の部分をキャストしようとしているが、私は最初のアスタリスクが何をするか分からないことを理解してください。 ヘルプをいただければ幸いです。

+3

それはポインタを間接参照:

コードは同等です。 – tkausl

+0

ああ、今それは意味がある、ありがとう! – ConIsoInc

+2

このサイトでは暴力行為をしないでください!言語を選択してください:CまたはC++。 – bolov

答えて

0

h1がポインタであるとします。さもなければ、これはまったく意味がありません。

(h1 + 8 + i * 2)は、h1に対してオフセットされた新しいポインタを与えます。正確には今のところ多くはsizeof(*h1)に依存しています。オフセット値は(8+i*2)*sizeof(*h1)バイトです。

これの前に(uint_16_t *)を置くと、uint_16_tポインタに変換されます。その前にアスタリスクを置くと、そのメモリ位置の内容がuint_16_tとして扱われます。

for (i = 0; i < 4; i++) { 
    uint_16_t * tmp = (uint16_t *)(h1 + 8 + i * 2); 
    hv[i] = *tmp; 
} 
+0

ええ、h1はuint_8 tho型の配列です。 Sryは言及するのを忘れた – ConIsoInc

関連する問題