인프런 커뮤니티 질문&답변

강진성님의 프로필 이미지
강진성

작성한 질문수

홍정모의 따라하며 배우는 C언어

10.15 포인터의 호환성

18분 30초경 코드가 뭐가 문제인가요/?

작성

·

74

1

18분 30초경 코드가 뭐가 문제인가요?? y는 그냥 const를 사용한 변수고, p2는 y의 주소를 담는 변수이고, p1도 그냥 y의 주소를 담는 변수인 것 아닌가요?

답변 1

1

안녕하세요? 질문&답변 도우미 Soobak 입니다.

 

C언어에서는 const int* 로 선언된 p2int* 로 선언된 p1 에 할당하는 것이, 경고를 발생시키기는 하지만 허용은 됩니다. 이 때, 형변환을 통해 암묵적으로 const 한정자가 제거됩니다.

이 때, *p1 = 20; 처럼 p1 을 통해 y 를 수정하는 것은 const int y = 10; 으로 선언된 y 가 상수라는 것을 위반하는 것이므로, 정의되지 않은 동작이나 버그가 발생하게 됩니다.

따라서, C++ 에서는 이러한 문법을 허용하지 않으며 컴파일 타임에서 오류가 발생하게 됩니다.

강진성님의 프로필 이미지
강진성

작성한 질문수

질문하기