C++ Chapter 02-1 : 포인터(pointer), 상수화(const)(2)
Const
데이터를 선언할 때 const를 앞에 붙이면 이후에 수정할 수 없는 변수가 된다.
const int num = 3;
// num = 2; <- num은 상수로 지정되었기 때문에 컴파일 에러 발생
const를 선언할 때 위치는 아래와 같이 바꿔서 입력해도 문제가 없다.
const int num = 3;
const int num = 3;
Const Pointer
Const Pointer 변수는 *의 위치에 따라 의미가 달라진다.
1. Const가 맨 앞에 위치하는 경우
const int * ptr = & num;
#include <iostream>
using namespace std;
int main(void)
{
int num1 = 1;
int num2 = 2;
const int * ptr = &num1;
cout<<num1<<endl;
cout<<*ptr<<endl;
cout<<ptr<<endl;
// *ptr = 3; 포인터가 가리키는 값을 바꾸는 것은 불가능
num1 = 3;
cout<<num1<<endl;
cout<<*ptr<<endl;
cout<<ptr<<endl;
ptr = &num2;
cout<<num2<<endl;
cout<<*ptr<<endl;
cout<<ptr<<endl;
return 0;
}
1
1
0x61fe14
3
3
0x61fe14
2
2
0x61fe10
num의 값과 ptr 주소를 바꾸는 것은 가능하지만 ptr이 가리키는 값(*ptr)은 수정하지 못한다.
2. Const가 중간에 위치하는 경우
int* const ptr = #
#include <iostream>
using namespace std;
int main(void)
{
int num1 = 1;
int num2 = 2;
int* const ptr = &num1;
cout<<num1<<endl;
cout<<*ptr<<endl;
cout<<ptr<<endl;
*ptr = 3;
cout<<num1<<endl;
cout<<*ptr<<endl;
cout<<ptr<<endl;
num1 = 4;
cout<<num1<<endl;
cout<<*ptr<<endl;
cout<<ptr<<endl;
// ptr = &num2; ptr 주소를 바꾸는 것은 불가능
return 0;
1
1
0x61fe0c
3
3
0x61fe0c
4
4
0x61fe0c
ptr 자체를 상수화해서 주소값(ptr)을 바꾸는 것이 불가능하지만, ptr이 가리키는 값(*ptr)과 우측값(Rvalue)에 해당하는 num은 바꿀 수 있다.
3. 두 가지 모두 해당하는 경우
const int* const ptr = #
우측값만 변경이 가능하고, 주소값(ptr)과 포인터가 가리키는 값(*ptr) 모두 바꾸는 것이 불가능하다.
함수에서의 Const
1. 매개 변수 자료형에 사용되는 경우
int Function(const int num)
#include <iostream>
using namespace std;
int add(const int num1, const int num2)
{
/*
num1++;
num2++;
num1과 num2는 상수화된 매개변수로 함수 내부에서 변경할 수 없음
*/
return num1+num2;
}
int main(void)
{
cout<<add(1,2)<<endl;
return 0;
}
3
위 예제처럼 매개변수를 상수화하면 함수 내부에서 변경할 수 없다.
2. 리턴 자료형에 사용되는 경우
함수 앞에 const가 붙는 경우에는 리턴 값을 상수화 시키는데, 이는 이후에 참조자 반환 함수에서 활용할 수있다.
const int Function()
{
return 1;
}
3. 함수 선언에 사용되는 const 멤버 함수
이에 관해서는 class 파트 학습 이후에 알아보도록 하자.
참고자료
[C/C++] const 개념 한번에 이해하기
const는 변수를 상수화 시키는 키워드이다. 상수란? 상수란 변하지 않는 값을 뜻한다. 변수란 한 번 선언하면 값을 계속 바꿀 수 있지만, 상수는 처음 선언할 때만 값을 할당할 수 있으며 그다음부
googleyness.tistory.com
〔C++〕함수에서의 위치에 따른 const 의 의미 (부제: 함수의 반환값에 언제 const 를 붙이면 좋을까?
0. 계기 42서울의 c++ 과제를 풀고나서 동료 평가를 받았는데, 되도록이면 모든 함수의 반환값을 const & 로 해주면 좋겠다는 조언을 받았다. 이유는 프로그램의 크기가 커질수록 참조자로 반환할
love-every-moment.tistory.com
- https://learn.microsoft.com/ko-kr/cpp/cpp/const-cpp?view=msvc-170