지역변수와 값 전달

 

인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!

 

 


 

메모리 구조

 

TEXT

DATA:  .rodata, .data, .bss   <- 전역변수

STACK                                 <- 지역변수

HEAP

 

전역변수는 '데이터영역'에 들어가고

지역변수는 '스택영역'에 들어간다.

 

 

 

 

메모리 구조

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

스택프레임

http://www.tcpschool.com/c/c_memory_stackframe

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

 


 

전역변수 vs. 지역변수

 

더보기
#include <iostream>
using namespace std;

// 전역 변수
int globalValue = 0;

void Test()
{
    cout << "전역 변수의 값은 : " << globalValue << endl;
    globalValue++;
}

int main()
{
    cout << "전역 변수의 값은 : " << globalValue << endl;
    globalValue++;

    Test();

    // 지역 변수
    int localValue = 0;

    return 0;   
}

 

&globalValue는 데이터영역

&localValue는 스택영역

 

 

 


 

 

 

 

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
#include <iostream>
using namespace std;
 
// 지역 변수와 값 전달
 
// 전역 변수
// 참고) 초기화 여부, const 등  .rodata, .data  .bss
int globalValue = 0;
 
void Test()
{
    cout << "전역 변수의 값은 : " << globalValue << endl;
    globalValue++;
}
 
void IncreaseHp(int hp)
{
    hp = hp + 1;
}
 
// [매개변수][RET][지역변수] [매개변수][RET][지역변수] [매개변수][RET][지역변수]
int main()
{
    int hp = 1;
 
    cout << "Increase 호출 전 : " << hp << endl;
    IncreaseHp(hp);
    cout << "Increase 호출 후 : " << hp << endl;
 
    return 0;   
}
cs

 

 

 

 

 

 

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
32
33
34
35
36
#include <iostream>
using namespace std;
 
// 지역 변수와 값 전달
 
// 전역 변수
// 참고) 초기화 여부, const 등  .rodata, .data  .bss
int globalValue = 0;
 
void Test()
{
    cout << "전역 변수의 값은 : " << globalValue << endl;
    globalValue++;
}
 
void IncreaseHp(int hp)   //아래의 IncreaseHp(hp)의 주소값 사용. (int hp)는 매개변수로 받아준다
{
    hp = hp + 1;          // hp=2가 되지만 아래에 영향을 주지 않는다.
}
 
// [매개변수][RET][지역변수(hp=1)] [매개변수(hp=1)->(h=2)로 변화][RET][지역변수] [매개변수][RET][지역변수] // 매개변수가 변해도 지역변수는 변하지 않는다

int
 main()
{
    int hp = 1;   // 지역변수
 
    cout << "Increase 호출 전 : " << hp << endl;
    IncreaseHp(hp);   //매개변수인 IncreaseHP()에 hp=1를 복사해서 넣어줌. IncreaseHP(1)
    cout << "Increase 호출 후 : " << hp << endl;
 
    return 0;   
}
 
 
// 위의 void IncreaseHp(int hp)  
// 아래의 int hp
// int hp는 표기는 같지만 다른 개념. 하나는 매개변수, 다른 하나는 지역변수
cs

 

 

 

 

 

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
32
33
34
35
36
37
38
39
40
#include <iostream>
using namespace std;
 
// 지역 변수와 값 전달
 
// 전역 변수
// 참고) 초기화 여부, const 등  .rodata, .data  .bss
int globalValue = 0;
 
void Test()
{
    cout << "전역 변수의 값은 : " << globalValue << endl;
    globalValue++;
}
 
void IncreaseHp(int hp)   //아래의 IncreaseHp(hp)의 주소값 사용. (int hp)는 매개변수로 받아준다
{
    int finalHP = hp + 1;
    //hp = hp + 1;          // hp=2가 되지만 아래에 영향을 주지 않는다.
}
 
// [매개변수][RET][지역변수(hp=1)] [매개변수(hp=1)][RET][지역변수 finalHP=2] [매개변수][RET][지역변수]
// [매개변수][RET][지역변수(hp=1)] [매개변수(hp=1)][RET][지역변수 finalHP=2]
// [매개변수][RET][지역변수(hp=1)]  // 결국 이것만 남는다.
 
int main()
{
    int hp = 1;   // 지역변수
 
    cout << "Increase 호출 전 : " << hp << endl;
    IncreaseHp(hp);   //매개변수인 IncreaseHP()에 hp=1를 복사해서 넣어줌. IncreaseHP(1)
    cout << "Increase 호출 후 : " << hp << endl;
 
    return 0;   
}
 
 
// 위의 void IncreaseHp(int hp)  
// 아래의 int hp
// int hp는 표기는 같지만 다른 개념. 하나는 매개변수, 다른 하나는 지역변수
cs

 

 

 

 

'⭐ Programming > C++' 카테고리의 다른 글

[C++] 호출 스택  (0) 2022.03.22
[C++] 호출 스택  (0) 2022.03.22
[C++] Stack Frame 스택 프레임  (0) 2022.03.21
[C++] 함수기초  (0) 2022.03.21
[C++] Enumeration 열거형  (0) 2022.03.20