60. 상수화 변수

C언어에서 변수 선언문 앞에 const 키워드를 명시한 변수를 상수화 변수라 불러요.
상수화 변수는 값을 변경하지 못하여 흔히 상수라고도 부르죠.

상수화 변수는 선언과 동시에 초기화가 필요해요.
값을 변경하지 못하는 상수화 변수의 초기값을 설정하지 않는다면 아무런 의미가 없겠죠.

const 키워드를 포인트 변수 선언문에 명시하면 위치에 따라 상수화 의미가 조금씩 달라집니다.

const 키워드가 *과 변수명 사이에 오면 포인터 변수에 초기화한 메모리 주소를 다른 주소로 변경할 수 없다는 의미예요.

#include <stdio.h>
int main()
{
    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    int *const pi = arr;
    pi = arr+1; //컴파일 오류
    pi[0] = 9; //가능    
    return 0;
}

const 키워드가 * 앞쪽에 오면 포인터 변수가 가리키는 곳의 내용을 변경할 수 없다는 의미죠.
실제 이와 같은 형태로 가리키는 곳을 변경하지 않겠다는 의미로 입력 매개 변수를 결정하는 함수는 흔히 볼 수 있어요.
그 중에 하나가 strcmp 함수예요.

int strcmp ( const char * str1, const char * str2 ); 문자열을  비교하는 함수

#include <stdio.h>
int main()
{
    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    const int *pi = arr; //int cont *pi=arr; 과 같은 표현
    pi = arr+1; //가능
    pi[0] = 9; //컴파일 오류  
    return 0;
}