unsigned char array_add[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
...
if ((*((uint32_t*)array_add)!=0)||(*((uint32_t*)array_add+1)!=0))
{
...
}
나는 배열이 모두 0인지 확인하고 싶습니다. 그래서 당연히 저는 unsigned int 32 타입에 대한 첫 번째 멤버의 주소이기도 한 배열의 주소를 캐스팅하려고 생각했습니다. 따라서이 코드는 64 비트, 8 바이트이기 때문에 두 번만하면됩니다. 정렬. 문제는 성공적으로 컴파일되었지만 프로그램이 여기에서 항상 충돌합니다.
저는 8 비트 마이크로 컨트롤러 인 cortex-M0에서 프로그램을 실행하고 있습니다.
내가 얼마나 잘못 되었나요?
이러한 코드 작성을 중단하십시오! 그것은 문제를 요구하는 것처럼 보입니다. 캐스트가 정의되지 않은 동작을 호출하는 것을 고려하십시오. 왜 당신은'uint32_t [2]를 사용하지 않습니까? – Olaf
그리고 Cortex-M0는 8 비트 CPU가 아닙니다! – Olaf
포인터를 사용하지 않는 이유는 무엇입니까? unsigned char * pt = array_add; if ((* (pt)! = 0) || (* (pt + 1)! = 0)) – dante