wellcome_공부일기

01.06. C++ | 식별자의 범위(Scope of an Identifier) 본문

프로그래밍/C++

01.06. C++ | 식별자의 범위(Scope of an Identifier)

ma_heroine 2020. 4. 23. 22:10

<목차>

1. 식별자의 범위(Scope of an Identifier)란?

2. 지역 변수(Local Variable)과 전역 변수(Global Variable)차이 

3. 지역 범위를 이용할 때, 데이터 타입(Data Types)을 안 붙이는 예

 

 

식별자의 범위(Scope of an Identifier)란?

식별자 범위란 프로그램 내에서 어디서 식별자가 접근가능한지 나타내는 것을 말합니다.

지역 식별자(Local Identifier)란 함수 혹은 블럭 내에 선언된 식별자를 말합니다.

전역 식별자(Global Identifier)란 모든 함수 선언 밖에 선언된 식별자를 말합니다. 

주의 할 점은 C++이 한 함수 내에 다른 함수를 품지 못한다는 것입니다. 하지만 함수가 아닌 블럭은 품을 수 있습니다. 

#include <iostream> 

using namespace std;

int main()
{
    int x = 0;
    cout << x << ", " << &x << endl; //0, 0x7ffeeea83968

    {
        int x = 1;
        cout << x << ", " << &x << endl; //1, 0x7ffeeea83964
    }

    {
        int x = 2;
        cout << x << ", " << &x << endl; //2, 0x7ffeeea83960
    }
    cout << x << ", " << &x << endl; //0, 0x7ffeeea83968

    return 0;
}

- ' { } '로 지역 범위를 설정할 수 있습니다. 중괄호로 설정한 범위를 블럭(block)이라고 부릅니다.

- 지역 변수는 해당 지역 범위를 벗어나면 사용할 수 없게 됩니다. 

- 지역 변수가 차지하고 있던 메모리는 그 지역 영역을 벗어날 때, 스택(stack) 원리로 메모리가 반납됩니다. 

- 반납된 메모리는 다음 지역 변수가 사용할 수 있도록 대기합니다. 

 

 

지역 변수(Local Variable)과 전역 변수(Global Variable) 차이 

앞서 말했듯, 전역 변수(Global Variable)는 모든 함수의 밖에서 선언이 되고 지역 변수(Local Variable)는 함수 혹은 블럭(block)내에 선언이 됩니다. 아래 코드는 지역 변수(Local Variable)과 전역 변수(Global Variable) 차이에 관한 내용입니다.

#include <iostream>

using namespace std;

int x = 100; //Global Variable

int main()
{
    {
        int x = 200; //Local Variable
        cout << x << endl; // print Local variable
    }
    cout << x << endl; //print global variable

    return 0;
}

 

 

지역 범위를 이용할 때, 데이터 타입(Data Types)을 안 붙이는 예

지역 범위 사용 시, 같은 변수에  대입(assignment)만 진행한다면, 변수의 값만 바뀌고 주소는 같은 걸 확인 할 수 있습니다.
데이터 타입(Data Types)을 선언하지 않으면, 지역 범위를 설정했더라도 같은 주소에 변수의 값만 바뀌었다고 인식하기 때문입니다. 

#include <iostream> //cout cin, endl

using namespace std;

int main()
{
    int x = 0;
    cout << x << ", " << &x << endl; //0, 0x7ffee9848968

    {
        x = 1;
        cout << x << ", " << &x << endl; //1, 0x7ffee9848968
    }

    {
        int x = 2;
        cout << x << ", " << &x << endl; //2, 0x7ffeeea83960
    }
    cout << x << ", " << &x << endl; //1, 0x7ffee9848968

    return 0;
}

 

 

지역 범위 연습문제 입니다. 

output을 추측하고 코드를 돌려봅시다.  ٩꒰。•◡•。꒱۶ 

#include <iostream>

using namespace std;

void doSomething(int x)
{
    x =123;
    cout << x << endl;
}

int main()
{
    int x =0;

    cout << x << endl;
    doSomething(x);
    cout << x << endl;

    return 0;

}
Comments