supersumin 2025. 3. 13. 03:11

Constant(상수) 란?

C언어에서 상수란 일반적으로 변경할 수 없는 값이다.

Literal Constant(일반 상수)

숫자와 문자같이 고정된 값이다.

Ex code

int x = 30;		// x는 30이라는 value를 가지는 int type 변수
const int y = 12;	// y는 12라는 value를 가지는 int type 변수이며, 이는 바꿀 수 없다.

y = 15; // Error 발생

포인터 상수 (Pointer Constant) vs. 상수 포인터 (Constant Pointer)

Pointer Constant(포인터 상수, int *const ptr)

Pointer 자체가 Constant로 pointer로 가리키는 주소를 변경할 수 없다는 뜻이다.

Constant Point(상수 포인터, const int *ptr)

Pointer가 가리키는 대상이 Constant로 pointer가 가리키는 값을 변경할 수 없다는 뜻이다.

Ex code

#include <stdio.h>

int main() {
    int a = 10, b = 20;

    // 1. 포인터 상수 (Pointer Constant)
    int *const ptr1 = &a;  // ptr1은 다른 주소로 변경 불가
    *ptr1 = 15;            // (O) 가리키는 값 변경 가능
    // ptr1 = &b;          // (X) ERROR: 주소 변경 불가

    // 2. 상수 포인터 (Constant Pointer)
    const int *ptr2 = &a;  // ptr2는 다른 주소로 변경 가능
    // *ptr2 = 30;         // (X) ERROR: 가리키는 값 변경 불가
    ptr2 = &b;             // (O) 주소 변경 가능

    // 3. 상수 포인터 + 포인터 상수
    const int *const ptr3 = &a;  // ptr3은 주소 변경 불가 + 값 변경 불가
    // *ptr3 = 40;               // (X) ERROR: 값 변경 불가
    // ptr3 = &b;                // (X) ERROR: 주소 변경 불가

    printf("ptr1: %d\n", *ptr1); // 15
    printf("ptr2: %d\n", *ptr2); // 20
    printf("ptr3: %d\n", *ptr3); // 10

    return 0;
}