-
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& x와 int &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