MISC_OPT l1.l2.l3.bMiscOption
void function (void)
{
uint8_t *bRam;
bRam = (uint8_t *)&Struct.Option; <<<<<<<<<
MISC_OPT = *bRam++;
BLCK_SEC = *bRam++;
}
}
다른사람이 짠 소스를 보다 의문이 생겼습니다.
이런 형태인데 화살표<<<<<<<< 부분에 대해서 질문입니다.
bRam = (uint8_t *)&Struct.Option;
이부분을
bRam = &Struct.Option;
이렇게 (uint8_t *) 포인터 캐스팅 부분을 빼도 똑같을거라고 생각하는데
터보씨에서 구조체까지는 아니더라도 포인터 캐스팅을 사용하여 테스트 해보았습니다만..제 생각대로였습니다..
이렇게 사용하는 이유가 있는건지, 상관이 없는건지, 제가 뭘 알아봐야 할 지 궁금합니다.
도움 주시면 감사하겠습니다..
포인터의 크기는 상관없으나 컴파일러의 제약조건에 걸리지 않기 위함이 큽니다
컴파일러는 코딩에 의한 변수형의 실수등을 방지하고자 제약을 걸어두게 됩니다
uint의 메모리 크기를 예측할 수 있지요 컴파일러든 사용자든
uint* 쓰고 char* 로 캐스팅하면 그 포인터가 가르키는 변수의 크기를 알 수 없지요.포인터형만 보고는