본문 바로가기
IVS/C 프로그래밍

[C] const 키워드

by 코곰_ 2025. 1. 13.

const 키워드

  • 변경할 수 없는 값을 선언하기 위해 사용
  • 특정 데이터의 값을 의도치 않게 변경하는 것을 방지한다. 

 

아래의 차이점을 알아보자. 

const int num = 10;
const int* ptr = #
int* const ptr = #
const int* const ptr = #

 

 

 

1. const int num = 10;

  • 설명:
    • num은 상수(const) 정수로 선언되었으며, 값을 변경할 수 없다.
  • 특징:
    • 값을 초기화하지 않으면 컴파일 오류가 발생한다.
    • num에 새로운 값을 할당하려고 하면 오류가 발생한다.
const int num = 10;
// num = 20; // 컴파일 오류: 상수 값을 변경할 수 없음

 

 

 

 

 

2. const int* ptr = #

  • 설명: 데이터를 보호하고 싶을 때 사용 (가리키는 값을 변경하지 않도록 보장).
    • ptr은 상수 정수(const int)를 가리키는 포인터.
    • 포인터가 가리키는 대상의 값은 변경할 수 없다.
    • 하지만, 포인터 자체는 다른 주소를 가리킬 수 있다.
  • 특징:
    • *ptr의 값은 변경 불가.
    • ptr은 다른 주소를 가리킬 수 있음.
const int num1 = 10;
const int num2 = 20;
const int* ptr = &num1; // ptr은 num1을 가리킴
// *ptr = 30; // 컴파일 오류: 상수 값을 변경할 수 없음
ptr = &num2; // ptr은 다른 상수를 가리킬 수 있음

 

 

 

 

 

3. int* const ptr = #

  • 설명: 포인터 자체를 고정하고 싶을 때 사용 (한번 초기화된 포인터를 변경하지 않도록 보장).  
    • ptr은 상수 포인터입니다.
    • 포인터 자체는 변경할 수 없지만, 포인터가 가리키는 값은 변경할 수 있습니다.
  • 특징:
    • ptr은 초기화 시 가리킬 주소를 정해야 하며, 이후 다른 주소를 가리킬 수 없음.
    • *ptr을 통해 값을 변경할 수 있음.
int num1 = 10;
int num2 = 20;
int* const ptr = &num1; // ptr은 num1을 가리킴
*ptr = 30; // num1의 값이 30으로 변경됨
// ptr = &num2; // 컴파일 오류: 상수 포인터는 다른 주소를 가리킬 수 없음

 

 

 

 

 

4. const int* const ptr = #

  • 설명: 데이터를 보호하고 포인터를 변경하지 않도록 완전히 고정하고 싶을 때 사용.
    • ptr은 상수 정수(const int)를 가리키는 상수 포인터입니다.
    • 포인터가 가리키는 값도 변경할 수 없고, 포인터 자체도 변경할 수 없습니다.
  • 특징:
    • *ptr의 값 변경 불가.
    • ptr이 다른 주소를 가리키도록 변경 불가.
const int num1 = 10;
const int num2 = 20;
const int* const ptr = &num1; // ptr은 num1을 가리키는 상수 포인터
// *ptr = 30; // 컴파일 오류: 상수 값을 변경할 수 없음
// ptr = &num2; // 컴파일 오류: 상수 포인터는 다른 주소를 가리킬 수 없음