[DS] Pointers
- Sequential 표현
- 장점
- 연속적인 요소들을 고정된 거리를 두고 저장함.
- 많은 연산에 적용 가능
- ex) 배열 int a[10] 등.
- 단점
- 삽입, 삭제에 O(n)의 시간 복잡도 소요. (∵ 위치 정렬이 필요)
- 배열의 크기는 고정되어 있기에 데이터 공간의 낭비가 있음.
- 장점
- Linked 표현
- node 를 통해 list를 표현
- data : 정보를 담고 있음
- pointer : 다음 list 요소를 가리킴. (link)
- 크기 제한이 없음.

- node 를 통해 list를 표현
- C의 pointer
- operator
- & : 주소를 나타내는 operator
-
- : 주소가 가리키는 값(value)을 나타내는 operator s
- operator
int i; // i에는 정수형 변수 저장
int *pi; // pi에는 정수형 변수의 주소 저장
pi = &i; // i의 주소 pi에 할당
// i의 저장값 변경 방법
i = 10; // 1
*pi = 10; // 2
- null pointer : 아무것도 가리키지 않는 포인터.
- 정수 0으로 표현
- 체크 방법 `if (pi == NULL)` or `if(!pi)`

4.1.1 Pointers Can Be Dangerous
- pointer는 유연성 & 효율성 면에서 좋음
- 예상치 못한 메모리 공간에 접근해 위험할 수 있음
- 아무것도 가리키지 않을 때는 NULL로 바꿔야 함
- pointer 타입을 바꿀 때 type cast를 반드시 해야 함.
pi = malloc(sizeof(int)); // 4 만큼의 정수형 공간 할당 pf = (float *) pi; // 정수 -> 실수로 type cast
4.1.2 Using Dynamically Allocated Storage
malloc을 하면 반드시free해주자.[Program 4.1]
int i, *pi;
float f, *pf;
pi = (int *) malloc(sizeof(int)); // 4 byte 동적 할당
pf = (float *) malloc(sizeof(float)); // 8 byte 동적 할당
*pi = 1024; // i = 1024
*pf = 3.14; // f = 3.14
printf("an integer = %d, a float = %f\n", *pi, *pf);
free(pi); // 사용 완료 후엔 free
free(pf); // 사용 완료 후엔 free
만약 8번째 줄 아래에
pf = (float *) malloc(sizeof(float));
을 넣는다면, 기존에 할당한 공간은 미아가 되고, 3.14라는 값 또한 사라진다.
그리고 새로운 공간이 할당되고, 9번째 줄을 통해 free된다.
공유하기
Twitter Facebook LinkedIn글 이동
Comments