[완료]포인터에 관하여 ..;;

asleea의 이미지

u32 *ptr = (u32 *) 0xE0000300;

주소 값 앞에 (u32 *)는 무엇을 뜻하는 거고 왜 사용 하는건가요 ..?;;;

hyeonykim의 이미지

보통 그냥 0x3000뭐 이런식으로 쓰면 그냥 단순히 16진수 값이라고 볼 수 있는데,

위의 경우는 포인터를 의미하는 경우 이므로 0xE00003000이 주소값이라는 것을 명시하기 위해서 케스팅 연산자를 사용한거라고 보시면 됩니다.

(u32 *)는 케스팅 연산자라고 보시면 되요.

asdefary의 이미지

0xe0000300은 단순한 상수라서 컴파일러가 어떠한 타입의 변수인지를 인식 못 할 수가 있습니다. 뭐 보통은 그렇진 않겠지만요...

그런고로 (u32 *)을 안 붙였을 경우엔 u32 *ptr이란 변수에 0xe0000300이란 단순한 숫자를 대입하게 되므로 타입 미스매칭으로 컴파일시 Warning, 심하면 Error가 발생하게 됩니다.
따라서 u32 *타입의 ptr이란 변수에 u32 *타입의 0xe0000300을 대입한다는 것을 컴파일러에게 알리기 위해 (u32 *) 타입 캐스팅을 붙인 것입니다.

나의 모든 생명은 단 한 명의 소녀를 위하여.