6. const, 메모리 공간, Call-by-value & Call-by-reference
2024. 4. 11. 13:59ㆍ[C++]/C++ 언어 기초
🍃 C언어의 복습을 유도하는 확인학습 문제
[문제 1] 키워드 const의 의미
키워드 const는 어떠한 의미를 갖는가? 다음 문장들을 대상으로 이를 설명해보자
- const int num = 10;
- const int * ptr1 = &val1;
- int * const ptr2 = &val2;
- const int * const ptr3 = &val3
- const int num = 10; ▶ 변수 num을 상수화!
- const int * ptr1 = &val1; ▶ 포인터 ptr1을 이용해서 val1의 값을 변경할 수 없음
- int * const ptr2 = &val2; ▶ 포인터 ptr2가 상수화됨
- const int * const ptr3 = &val3; ▶ 포인터 ptr3가 상수화 되었으며, ptr3를 이용해서 val3의 값을 변경할 수 없음
[문제 2] 실행중인 프로그램의 메모리 공간
실행중인 프로그램은 운영체제로부터 메모리 공간을 할당 받는데, 이는 크게 데이터, 스택, 힙 영역으로 나뉜다.
각각의 영역에는 어떠한 형태의 변수가 할당되는지 설명해보자. 특히 C언어의 malloc과 free함수와 관련해서도 설명해보자.
- 데이터 : 전역변수가 저장되는 영역
- 스택 : 지역변수 및 매개변수가 저장되는 영역
-> 스택은 때가되면 할당되었다가 떄가되면 알아서 소멸됨. - 힙 : malloc 함수호출에 의해 프로그램이 실행되는 과정에서 동적으로 할당이 이뤄지는 영역
-> 스택과 달리 이 시점에 할당해!라고 명령해야 할당되고, 내가 지워주지 않으면 안빠져나감 - malloc & free : malloc 함수호출에 의해 할당된 메모리 공간은 free 함수호출을 통해서 소멸하지 않으면 해제되지 않는다.
-> 힙에다가 메모리 공간을 할당하고 해제하는 함수들
[문제 3] Call-by-value vs Call-by-reference
함수의 호출 형태는 크게 '값에 의한 호출(Call-by-value)'과 '참조에 의한 호출(Call-by-reference)'로 나뉜다.
이 둘을 나누는 기준이 무엇인지, 두 int형 변수의 값을 교환하는 Swap 함수를 예로 들어가면서 설명해보자.
Call-by-value
void SwapByValue(int num1, int num2) {
int temp = num1;
num1 = num2;
num2 = temp;
}
- 인자가 '값'의 형태를 띄고 있다.
- 이 함수 내에서는 함수 바깥에 선언된 메모리 공간 혹은 변수의 접근이 불가능하고, 값의 변경도 불가능하다.
Call-by-reference
void SwapByRefint *ptr1, int *ptr2) {
int temp = *ptr1;
*ptr1 = *ptr2;
*ptr2 = temp;
}
- '주소값'을 인자로 전달 받는다.
- 주소값을 가지고 있기 때문에 함수 밖에 선언된 메모리 공간 혹은 변수의 접근이 가능하다!
반응형
'[C++] > C++ 언어 기초' 카테고리의 다른 글
8. [C++] 참조자(Reference)의 이해 (0) | 2024.04.11 |
---|---|
7. [C++] 새로운 자료형 bool (0) | 2024.04.11 |
01-06 은행계좌프로그램 실습 1단계 (0) | 2024.04.11 |
5. [C++] 이름공간(namespace) (0) | 2024.04.11 |
4. [C++] 인라인(inline) 함수 (0) | 2024.04.11 |