ABOUT ME

  • 03.포인터 배열
    Computer Science/자료구조 2020. 9. 16. 14:17

    배열은 같은 타입의 변수가 여러 개 필요한 경우에 사용한다.

    int num[5] => num[0] ... num[4]까지 5개의 정수형 변수를 배열로 만든 것이다.

    배열의 인덱스는 0부터 시작함에 꼭 유의한다.

     

    포인터는 c언어에서만 사용한다. c언어에서는 메모리 효율을 높이는 것을 목적으로 포인터를 사용한다. 성능이 좋은 컴

    퓨터에서는 굳이 포인터를 사용할 필요가 없다. 고성능 메모리라면 굳이 할당을 하지 않더라도 용량이 남기 때문이다.

    포인터변수는 주소값만을 저장할 수 있는 변수이며 변수명을 통해 접근할 수 있다.

     

    포인터에서 사용되는 기호는 두 가지이다.

    * : 주소를 저장할 수 있는 변수 선언

    & : 변수가 가지고 있는 주소 값

     

    -동적변수 공간 할당

    p = (int * ) malloc(sizeof(int)); //p는 스택 메모리 변수, p주소가 800이면 p가 가리키는 곳은 동적변수 생성 공간

    *p = 15; //*p는 힙 메모리 변수, p주소가 800이면 p가 가리키는 곳은 15

     

    -C/C++ 동적변수 할당 차이

    c언어는 p = (int * ) malloc(sizeof(int));로 동적변수를 할당하고 free p;로 해제한다

    c++언어는 p=new int; 로 동적변수를 할당하고 delete p;로 해제한다.

     

    malloc 함수는 메모리 할당의 의미로 int타입에 필요한 사이즈만큼 메모리공간을 할당하고 그 공간의 시작 주소를 리턴하라는 것이다.

     

    -NULL 포인터

    =현재 아무것도 가리키지 않고 있다는 의미이다. undefined된 포인터와는 의미가 다르다.

     

    -*&date =15;

    date의 주소값이 가리키는 것은 변수 자체

    변수를 주소값으로 mapping시키는 함수가 &(앰퍼센드)

    주소값을 그 주소가 가리키는 변수로 매핑시키는 함수가 *(애스터리스크)

    따라서 역함수이므로 *&date = date 이다

     

    -swap 두가지 방법

    1.

    void swap (int *x, int *y)

    { int temp;

    temp = *x; *x = *y; *y = temp;

    }

    void main( )

    { int a = 20;

    int b = 40;

    swap(&a, &b);    // 변수 a, b의 주소 값 전달

    cout << a; cout << b;

    }

     

    2.

    void swap (int& x, int& y)   //    int& xint &x는 동일한 기호임

    { int temp;

    temp = x; x = y; y = temp;

    }

    void main( )

    { int a = 20;

    int b = 40;

    swap(a, b);   //변수 a, b를 그대로 전달

    cout << a; cout << b;

    }

     

     

    'Computer Science > 자료구조' 카테고리의 다른 글

    02. 추상자료형  (0) 2020.09.15
    01.객체지향 방법론  (0) 2020.09.14
Designed by Tistory.