1. 자료형별 함수 사용법
C++에서 함수는 다양한 자료형을 반환하고 인자로 받을 수 있음. 일반적으로 사용되는 함수의 형태를 살펴봄.
(1) 반환값이 없는 함수 (void)
void PrintMessage() {
std::cout << "Hello, World!" << std::endl;
}
(2) 기본 자료형 반환 함수
int Add(int a, int b) {
return a + b;
}
(3) 참조 반환 함수
int& GetValue(int& value) {
return value;
}
(4) 포인터 반환 함수
int* AllocateMemory() {
return new int(10);
}
2. 함수의 인자 사용법
C++ 함수에서는 다양한 방법으로 인자를 전달할 수 있음.
(1) 값 전달 (Call by Value)
void ModifyValue(int x) {
x = 10; // 원본 값 변경되지 않음
}
(2) 참조 전달 (Call by Reference)
void ModifyReference(int& x) {
x = 10; // 원본 값 변경됨
}
}
(3) 포인터 전달 (Call by Pointer)
void ModifyPointer(int* x) {
if (x) {
*x = 10; // 원본 값 변경됨
}
}
(4) R-value 참조 (Move Semantics)
void ModifyRvalue(int&& x) {
x = 10; // 일시적인 값 사용 가능
}
3. L-value와 R-value 개념
C++에서는 L-value와 R-value의 개념을 이해하는 것이 중요함.
(1) L-value (좌측값)
- 메모리에 존재하며 식별할 수 있는 값
- 변수처럼 수정 가능
int a = 5; // a는 L-value
(2) R-value (우측값)
- 일시적으로 존재하며 변경할 수 없는 값
int b = a + 10; // a + 10은 R-value
(3) R-value 참조
- 이동 연산(move semantics)을 위해 사용
int&& r = 10; // 10은 R-value
4. 함수 호출 시 스택 메모리 구조
함수가 호출될 때 스택 메모리에 어떻게 쌓이는지 살펴봄.
- 함수 호출 시 스택 프레임(Stack Frame) 생성됨
- 함수의 매개변수가 스택에 저장됨
- 함수 실행이 끝나면 스택 프레임 해제됨
예제 코드와 메모리 변화
void TestFunction(int x) {
int y = x + 5;
}
int main() {
int num = 10;
TestFunction(num);
return 0;
}
메모리 변화 과정
- main() 실행
기본적인 메모리영역 - main()함수에서 num 초기화
코드실행시 num 초기화 부분 - TestFunction 실행 하여 스택에 공간 생성 매개변수 x = 10 스택에 저장 지역 변수 y 스택에 저장됨 (y = 15)
함수 호출 후 내부의 변수값들 - TestFunction 실행 완료 후 스택에서 y와 x 해제됨
함수 실행 후 메모리영역 - main() 종료 후 프로그램 종료
코드를 실행 후 없어진 메모리영역
'공부 > C++' 카테고리의 다른 글
C++ Class (0) | 2025.03.07 |
---|---|
C++ 포인터와 레퍼런스 (0) | 2025.03.07 |
변수의 선언과 초기화 & 메모리 할당 과정 (0) | 2025.03.05 |
기본 - C++ 프로그램의 메모리 구조 (0) | 2025.03.05 |
기본 - 컴파일러 (0) | 2025.03.05 |