[C/C++] const 개념, 특징, 사용법 (포인터)
C언어에서 const는 변수의 값을 변경할 수 없도록 만드는 키워드
즉, 읽기 전용(Read Only) 변수를 만들 때 사용한다.
const를 사용하면 프로그램에서 실수로 값이 변경되는 것을 방지할 수 있기 때문에 안정적인 코드를 작성할 수 있다
1. const 개념
const = 상수
한번 값이 초기화되면 프로그램 실행 중에 값을 변경할 수 없다
기본 문법
const 자료형 변수명 = 값;
예제
#include <stdio.h>
int main() {
const int num = 10;
// num = 20; // 오류 발생
printf("%d", num);
return 0;
}
만약 cosnt로 변수를 저장한 후 num의 값을 다시 변경하려 하면 num은 상수 변수이기 때문에 컴파일 오류가 발생한다
2. const를 사용하는 이유
const는 프로그램의 안정성과 가독성을 높이기 위해 사용
1. 값 변경 방지
프로그램 실행 중 중요한 값이 변경되는 것을 방지한다
예
const float PI = 3.14;
원주율은 변하면 안 되는 값이기 때문에 const로 선언
2. 코드 가독성 향상
const를 사용하면 해당 변수는 절대 변하지 않는 값이라는 것을 바로 알 수 있다
예
const int MAX_STUDENT = 30;
코드 보는 사람이
이 값은 변하지 않는 값이구나~ 라고 이해할 수 있다
3. const 변수 특징
1. 값 변경 불가
초기화 후 값 변경 불가능
2. 읽기 전용 변수
읽기는 가능하지만 수정 불가
3. 반드시 초기화
선언 시 초기화하는 것이 일반적
예
const int a = 5;
printf("%d", a);
4. const와 포인터
C언어에서 const는 포인터와 함께 사용할 때 의미가 달라짐!!!!!!!!!
1. 포인터가 가리키는 값이 상수
const int *p;
포인터가 가리키는 값은 변경 할 수 XXXXXXX
#include <stdio.h>
int main() {
int a = 10;
int b = 20;
const int *p = &a;
// *p = 30; // 오류
p = &b; // 가능
return 0;
}
즉, 값 변경은 불가능하지만 주소 변경은 가능하다
2. 포인터 자체가 상수
int * const p;
이 경우엔 포인터의 주소를 변경할 수 없다!!!!!!
int a = 10;
int b = 20;
int * const p = &a;
*p = 30; // 가능
p = &b; // 오류
포인터 자체가 상수일 땐, 값 변경이 가능하지만 주소 변경은 불가능함
3. 둘 다 상수
const int * const p
값 변경, 주소 변경 둘다 XXXXXXXXXXX
int a = 10;
const int * const p = &a;
// *p = 20; 오류
// p = &b; 오류
*** const 포인터 종류 ***
#include <stdio.h>
int main() {
int a = 10;
int b = 20;
/* 값이 상수 (값 변경 불가) */
const int *p1 = &a;
/*포인터가 상수 (주소 변경 불가) */
int * const p2 = &a;
/* 값도 상수 + 포인터도 상수 */
const int * const p3 = &a;
printf("초기값\n");
printf("a = %d\n", a);
/* p1 : 값 변경 불가, 주소 변경 가능 */
p1 = &b; // 가능
// *p1 = 50; // 오류
/* p2 : 값 변경 가능, 주소 변경 불가 */
*p2 = 30; // 가능
// p2 = &b; // 오류
/* p3 : 값 변경 불가, 주소 변경 불가 */
// *p3 = 40; // 오류
// p3 = &b; // 오류
printf("\n변경 후\n");
printf("a = %d\n", a);
return 0;
}
즉 ,
const int *p -> 값 보호
int *const p -> 포인터보호
const int *const p -> 둘 다 보호