2-1. 들어가기에 앞서서.

문제 1 : const 키워드의 의미

      const int n=10;

      const int* n;

      int* const n;

      const int* const n

문제 2 : stack의 용도 및 특징

문제 3 : heap의 용도 및 특징

문제 4 : malloc & free 함수의 필요성

 

2-2. 자료형 bool

참을 의미하는 true, 거짓을 의미하는 false중 하나의 값을 가진다.

 

2-3. 레퍼런스의 개념

대상에 별명을 붙여주는 행위

 

int & ref= val;

 

int main(void)

  {   

      int val=10; 

      int *pVal=&val;       // 주소 값을 얻기 위해 & 연산자 사용

      int &rVal=val;                   // 레퍼런스 선언을 위해 & 연산자 사용

      return 0;

  }

 

-       레퍼런스에 대한 또 다른 접근

변수란? 메모리 공간에 붙여진 이름.

그런 메모리 공간에 이름을 하나 더 추가하는 행위.

-       레퍼런스의 제약.

이름이 존재하지 않는 대상은 레퍼런스화 할수 없다.

선언과 동시에 바로 초기화 하여야 한다.

int main(void)

  {

      int &ref1;               // 초기화되지 않았으므로 ERROR!

      int &ref2=10;          // 상수가 올 수 없으므로 ERROR!

 

      int val=10;

      ref1=val;

      . . . . .

 

2-4. 레퍼런스와 함수.

-       포인터를 이용한 call-by-reference

함수 외부에 선언된 변수의 접근이 가능.

포인터 연산에 의해서 가능.

따라서 포인터 연산의 위험성 존재.

void swap(int *a, int *b)

  {

      int temp=*a;

      a++;               //잘못 들어간 코드

      *a=*b;

      *b=temp;

}

 

2-5. 레퍼런스를 이용한 성능의 향상.

-       부담스러운 call-by-value

함수 호출 시 인자 전달 과정에서 발생.

데이터를 복사하는 과정에서 발생.

 

-       대신할 수 있는 call-by-reference

전달되는 인자를 레퍼런스로 받으면 데이터의 복사 연산이 필요 없다.

원본 데이터의 손실 가능성이 있다. à const 선언의 이유.

 

2-6. 레퍼런스를 리턴하는 함수.

/*  ref_return.cpp  */

 int& increment(int &val)

 {

     val++;

     return val;

 

 int main(void)

 {

     int n=10;

     int &ref=increment(n);

 

     cout<<"n  : "<<n<<endl;

     cout<<"ref: "<<ref<<endl;

     return 0;

}

   

/*  ref_error.cpp  */

 int& function(void)

 {

     int val=10;

     return val;

 } 

 int main(void)

 {

     int &ref=function();

     cout<<ref<<endl;

     return 0;

 }

 

레퍼런스 리턴을 가급적이면 사용하지 않는 것이 좋겠다.

 

2-7. new & delete

-       newdelete 연산자의 기본 기능.

int main(void)

{

     int * val = new int; 

     int * arr = new int[size]; 

     . . . . .  

     delete val; 

     delete []arr;

     . . . . .

 

int main(void)

{

     int * val = (int*)malloc(sizeof(int)); 

     int * arr = (int*)malloc(sizeof(int)* size);

      . . . . .  

     free(val); 

     free(arr);

     . . . . .

 

-       NULL 포인터를 리턴하는 new 연산자.

메모리 할당 실패 시 NULL 포인터 리턴.

int* arr=new int[size];                                                              // 배열의 동적 할당

if(arr==NULL)                                                                        // 동적 할당 검사

  {

       cout<<"메모리 할당 실패"<<endl;

       return -1;                                                                        //프로그램 종료

  }            

 

 

'C,C++' 카테고리의 다른 글

Query Performance Counter  (0) 2015.12.22
열혈강의C++ 3장 요약  (0) 2015.12.09
열혈강의C++ 1장 요약  (0) 2015.09.15

+ Recent posts