-2
내 개발 환경은 ARM OMAP Sitata 용 g ++ 크로스 컴파일러로 구성됩니다. 부호없는 INT의 *에 부호없는 INT를 추가 할 때 나는 간단한 포인터 연산의 이상한 뉘앙스를 발견로는 다음과 같습니다부호없는 int를 부호없는 int에 추가 *
unsigned int* dst_base_addr;
unsigned int* dst_addr;
unsigned int dst_offset;
간단히
(부호없는 INT *)에 (부호없는 int)를 추가하려고dst_addr = dst_base_addr + dst_offset;
하나가 순진하게 생각하지만, 실제로 구제로 적절한 형식 변환을 수행하는 과정이다 다음 해당 결과
dst_addr = (unsigned int*)((unsigned int)dst_base_addr + (dst_offset << 2));
을 생산 하듯이 위의 해석되지 않습니다 다음과 같습니다.
dst_addr = (unsigned int*)((unsigned int)dst_base_addr + dst_offset);
질문 :이 상황에서 적절한 유형 변환이 필요한 이유는 무엇입니까?
실수를 피하십시오. –
dst_addr에 메모리를 할당하지 않고'dst_addr = dst_base_addr + dst_offset; '가 좋지 않습니다. –
'dst_addr = (unsigned int *) ((unsigned int) dst_base_addr + dst_offset);하지만 잘못된 포인터 연산이 작동하지 않습니다 – SingerOfTheFall