Computer Science/자료구조

03.포인터 배열

mj73 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;

}