inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

10.15 포인터의 호환성

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

299

젬싼jamssan

작성한 질문수 10

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를 붙이는것 자체가 주소 수정이 불가해져야하는데 오히려 워닝이 사라지니 당황스럽네요

c

답변 1

0

Hello Yeo

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/

Export template 안됨

1

26

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

56

3

main 함수에서 왜 int만 선언이 되는걸까요

1

57

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

55

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

49

1

프로토타입과 함수간의 인자 불일치

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

138

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

61

2

getchar(), putchar()

1

94

3

강의자리ㅛ

1

80

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

114

2

소스파일안에 여러 파일

1

76

2

F5와 F7의 차이

1

78

2

c = TWO * (a+b); 에서 a와 b는?

1

58

2

; 세미콜론을 붙이는 기준에 문의

1

70

1

Step over 기능 문의

1

53

2

2.6 강의 따옴표 출력 규칙 문의

1

76

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

61

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

65

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

54

2