Notice
Recent Posts
Recent Comments
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

SYDev

C++ Chapter 02-1 : 포인터(pointer), 상수화(const)(2) 본문

Programming Lang/C++

C++ Chapter 02-1 : 포인터(pointer), 상수화(const)(2)

시데브 2023. 7. 6. 10:29

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 = &num;

#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 = &num;

 

우측값만 변경이 가능하고, 주소값(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