인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

젬싼jamssan님의 프로필 이미지
젬싼jamssan

작성한 질문수

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

10.15 포인터의 호환성

10.15 (18분27초) 강의의 마지막 부분 c const and c++ const 에 관한 질문입니다!

작성

·

238

0

-------------------------------------1번째질문 --------------------------------

/*C const and C++ const*/

{

const int y;

const int* p2 = &y;

int* p1;

p1 = p2;  //warning (error in cpp)

}

우선 이 코드는 const를 우회해서 회피하려는 시도라 이런 코드를 왠만하면 사용하지 말라고 하셨는데,

왜 안되는지 궁금합니다.

제가 이해하기론 p1 의 주소값이 p2의 포인트주소 (y의 주소를 가르키는)로 대입되는거라 const에 구애

받지않고 변경이 가능하다고 생각이 들었습니다.

당연히 기존의 p1 = p2; 대신 p2 = p1; 이 들어간다면 (const int* p2 = &y;)의 const로 인해 p2의 주소가 

변환이 되지 않아 error가 뜨겠지요.

하지만 p1은 const로 고정되어 있지 않은데 사용 가능한거 아닌가 하는 생각이 듭니다.

어떠한 이유에서 이런 코드 사용을 지양해야하는 건가요??




----------------------------------------2번째 질문-----------------------------------

기존 본문대로 실행 후 아웃풋 창을 봤을 때

1>F:\Cproject\C_study\C_study\8_ptr_Compatibility_12.c(75,10): warning C4090: '=': different 'const' qualifiers

이런식 으로 나오는데  ( int* p1; )를  const int* p1; 로 교체 해줄 시 warning이 사라집니다.

혹시 const를 앞에 붙이면 이 코드를 사용 가능해지는지요?? 

/*C const and C++ const*/

{

const int y;

const int* p2 = &y;

const int* p1;

p1 = p2;  //warning (error in cpp)

}

const를 붙이는것 자체가 주소 수정이 불가해져야하는데 오히려 워닝이 사라지니 당황스럽네요

답변 1

0

1번째 질문은 const 선언을 왜 하는지를 생각해보셨으면 좋겠습니다.
작성하신 코드에서는 p1을 통해 'const' int y의 값을 바꾸실 수가 있습니다.

2번째 질문은 다른 분 질문에도 달아드렸던 기억이 나는데
const int*
int const*
int *const
const int* const
를 비교해보세요.

관련 글입니다만 먼저 실험을 해보시고 읽어보시길 권장합니다.
https://www.geeksforgeeks.org/difference-between-const-int-const-int-const-and-int-const/

젬싼jamssan님의 프로필 이미지
젬싼jamssan

작성한 질문수

질문하기