[C++] 지역변수와 값 전달
지역변수와 값 전달
인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다.
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!
메모리 구조
TEXT
DATA: .rodata, .data, .bss <- 전역변수
STACK <- 지역변수
HEAP
전역변수는 '데이터영역'에 들어가고
지역변수는 '스택영역'에 들어간다.
메모리 구조
스택프레임
http://www.tcpschool.com/c/c_memory_stackframe
전역변수 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 |
댓글
이 글 공유하기
다른 글
-
[C++] 호출 스택
[C++] 호출 스택
2022.03.22 -
[C++] 호출 스택
[C++] 호출 스택
2022.03.22 -
[C++] Stack Frame 스택 프레임
[C++] Stack Frame 스택 프레임
2022.03.21 -
[C++] 함수기초
[C++] 함수기초
2022.03.21