고려하십시오. 32 비트의 부호없는 두 개의 숫자가 하나의 배열에 저장되어 있습니다. 첫 번째 숫자는 위치 [0; 3]이고 두 번째는 [4; 8]. 이제 숫자 중 하나의 값을 변경하려면 다음 코드가 허용/문제가 있습니까?uint32_t *를 사용하여 uint8_t 배열의 값을 변경하십시오.
uint8_t array[8];
//...Fill it up...
uint32_t *ptr = NULL;
ptr = (uint32_t*)&array[0];
*ptr = 12345;
ptr = (uint32_t*)&array[4];
*ptr = 54321;
예, 그것은 문제가 , http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule –
유효 유형 (일명 엄격한 앨리어싱) 규칙을 위반했습니다.이 규칙은 분명하지 않습니다 **! 마샬링 사용 – Olaf
다른 방법으로도 할 수 있습니다 :'uint32_t' 값으로 채우는'uint32_t'의 배열을 가지고 있습니다. 그러면'uint8_t *'(" 네가 걱정하지 않는다면 데이터 표현). –