본문으로 바로가기

[C++]C++ 들어가기전에...

category 프로그래밍/C++ 2017. 3. 28. 01:45
728x90
반응형

안녕하세요. letitkang입니다.


오랜만에 또 글을 쓰네요. 귀차니즘 ㅠㅠ


다시 글을 써보겠습니다.


 

 

 



확실히 회사일이 바쁘다보니 집 회사 잠 이렇게 반복되네요.


글을 다시 포스팅하겠습니다!


오늘도 '윤성우의 C++ 열혈강의' 공부하면서 포스팅하고있습니다!


오늘은 C언어에서 배웠던 것들을 간단히 복습해보겠습니다.


1. 키워드 const


const 키워드를 사용하는 예제를 한번 보겠습니다.


===============================================================================================


1) const int num = 10;

2) const int * ptr1 = &val1;

3) int * const ptr2 = &val2;

4) const int * const ptr3 = &val3;


===============================================================================================


위의 4개를 살펴보겠습니다.


 C++는 예전 강의에서 말씀드렸다시피 C언어를 기반으로 설계된 것입니다. 그러므로 C언어의 기본적인 것들은 다 알아두어야합니다.


기본이라고 하지만, 몇개월 정도는 공부해야됩니다.


const는 상수화를 시켜주는 키워드입니다.


1) const int num = 10;


위의 선언은 변수 num을 상수화 시키는 것입니다.


#define과 비슷한 의미르 보시면됩니다.


 num값을 변경하면 에러가 뜹니다.


이것은 함수의 파라미터 같은 곳에도 유용하게 사용할 수 있습니다.


2) const int * ptr1 = &val1;


위의 선언은 포인터 ptr을 상수화 시켜서 val1의 값을 변경할 수 없게 하는 것입니다.


포인터가 다른 변수를 가리키게 할 수는 있으나, 값을 변경할 수는 없습니다.


3) int * const ptr2 = &val2;


위의 것을 살펴봅시다.


포인터 ptr2가 상수화가 되었습니다.


즉, 포인터가 다른 대상체를 가리킬 수 없습니다. 그러나 val2의 값은 변경할 수 없습니다.


4) const int * const ptr3 = &val3;


마지막의 것을 보시겠습니다.


위의 것은 포인터 ptr3이 상수화가 되었습니다. ptr3은 val3만 가리키고, val3의 값을 변경할 수 없습니다.


끝판 대장이네요.


const는 이정도로 알아 두면 됩니다.


 

 

 



2. 메모리 영역의 이해


두번째는 메모리 공간을 알아두어야 합니다. 실행중인 프로그램은 OS로부터 메모리 공간을 할당받습니다.


프로그램이 실행되고, int num = 1; 변수를 선언하면 이 변수는 메모리가 할당이 되고, 그 메모리에 저장이됩니다.


이런 메모리 공간은 크게 3가지로 나뉘게 됩니다.


===============================================================================================


1) 데이터영역

2) 스택영역

3) 힙영역


===============================================================================================


위의 메모리들은 프로그램이 실행될 때마다 할당이 되고, 메인 메모리인 RAM에 할당이 됩니다.


하나하나 차근차근 천천히! 살펴봅시다!


1) 데이터영역


이 영역은 여러 변수 중에서 전역변수가 저장되는 영역입니다.


전역변수만 할당되면 심심하죠?


전역변수와 static 변수가 할당되는 영역입니다.


프로그램의 시작과 동시에 할당되고, 프로그램이 종료가 되면 소멸됩니다.


2) 스택영역


스택 영역은 함수를 호출할 때, 지역변수 및 매개변수가 저장되는 영역입니다.


그러므로 함수 호출이 완료되면 사라지게 됩니다.


3) 힙영역


힙 영역은 malloc 함수를 호출하여 프로그램이 동작 중에 메모리가 동적으로 할당이 이루어지는 영역입니다.


malloc 함수 호출에 의해 할당된 메모리 공강는 free함수를 호출하여 소멸하지 않으면 해제가 되지 않습니다.


그러나 OS에 따라서는 OS가 알아서 메모리를 관리한다고 하지만, malloc-free는 꼭 써줘야됩니다.


3. Call by value, Call by reference


Call by value와 Call by reference는 아래의 두 함수를 보면 이해가 됩니다.


그리고 이 함수를 보고, 설명을 할 정도가 되어야지 포인터의 기본은 아는구나 라고 생각하게 됩니다.


===============================================================================================


void callbyvalue(int n1, int n2)

{

int tmp = n1;

n1 = n2;

n2 = tmp;

}


void callbyreference(int* ptr1, int* ptr2)

{

int tmp = *ptr1;

*ptr1 = ptr2;

ptr2 = tmp;

}


===============================================================================================


두 함수의 차이는 값의 복사, 값의 변경 이라고 보시면 됩니다.


첫번째 함수에 파라미터를 넣으면 함수 안에서는 파라미터의 값이 변경되지만, 함수를 벗어날 경우 값이 그대로입니다.


그러나 두번째 함수에서는 파라미터들이 함수내에서도, 함수를 벗어나서도 값이 변경됩니다.


두 함수의 차이를 한번 곰곰히 잘 생각해보시기바랍니다.


 

 



오늘 포스팅은 여기까지 하겟습니다.


읽어주셔서 감사합니다!

728x90
반응형

'프로그래밍 > C++' 카테고리의 다른 글

[C++]참조자(reference) 1  (0) 2017.04.04
[C++]자료형 bool  (0) 2017.03.30
[C++]이름공간(namespace) (2)  (0) 2017.02.20
[C++]이름공간(namespace) (1)  (0) 2017.02.20
[C++]인라인(inline)함수  (0) 2017.02.20