✅ 목표 (Goal)

포인터도 당연히 형변환이 된다.

포인터의 형변환도 별거 아니다. 너무 어렵게 생각하지 말기 바란다.

하지만 포인터 형변환은 꽤 위험한데 그 이유를 알아보자.

✅ 적법한 경우

🔹 일련의 데이터스트림을 구조체에 넣을때

(uint8_t*)&reg 요것의 의미 lsm6dox_reg.c

int32_t lsm6dsox_reset_set(lsm6dsox_ctx_t *ctx, uint8_t val) {
  lsm6dsox_ctrl3_c_t reg;
  int32_t ret;

  ret = lsm6dsox_read_reg(ctx, LSM6DSOX_CTRL3_C, (uint8_t*)&reg, 1);
  if (ret == 0) {
    reg.sw_reset = val;
    ret = lsm6dsox_write_reg(ctx, LSM6DSOX_CTRL3_C, (uint8_t*)&reg, 1);
}

🔹 void* 를 원래 형으로 형변환 할때

보이드 포인터란? (What is void pointer?) 그리고 제너릭 포인터

✅ 포인터 형변환에서 주의할점

🔹 형변환 후 잘못된 데이터 해석

포인터를 다른 타입으로 변환하면 원래 데이터의 크기와 정렬방식이 달라질수 있다.

int를 char로 변환시, 4바이트를 1바이트 단위로 접근하게 되어 이상한 값이 읽힐수 있다.

float을 int로 변환시, 부동소수점을 int로 읽어 희한한 값이 나올수 있다.