2017-12-02 1 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

관련 문제