[자료구조] 5. 포인터(Pointer)
이전 정리글 ↓
[자료구조] 4. 배열의 응용 : 다항식
이전 정리글 ↓ [자료구조] 3. C언어 배열과 구조체글을 쓰기에 앞서, C언어를 기반으로 서술함을 알립니다. 이전 정리글 ↓ [자료구조] 2. 자료구조 기본 개념[자료구조] 1. 자료구조 쉽게 이해하
w8err.tistory.com
이번 정리글에선 자료구조에서 필수적으로 알아야 하는, C언어의 포인터에 대해 제대로 알아보려 한다.
포인터
포인터의 사전적 정의는 이렇다.
변수의 메모리 공간(주소)를 가리키는 변수를 일컫는다.
말 그대로, 다른 변수의 주소를 가리키는 변수다.
모든 변수는 주소를 가지고 있다. 컴퓨터의 메모리는 Byte로 구성되어 있으며, 각 바이트마다 순차적으로 주소가 매겨진다.
int n1 = 300;
int *p; // int 자료형을 가리키는 p 포인터 변수
*p = &n1; // p 포인터변수에 n1의 주소를 넣음
int의 변수 n1이 선언되었다.
포인터 변수 p는 int형을 가리키는 포인터로 선언되었다.
p가 n1을 가리키게 하려면 a의 주소를 p에 대입한다(*p = &n1).
포인터는 이런 식으로 사용된다.
포인터 관련 연산자
* 연산자 - 간접참조 연산자(or 역참조 연산자)
& 연산자 - 주소 연산자
먼저, * 연산자는 포인터가 가리키는 곳에 값을 저장하는 연산자다.
p가 가리키는 장소에 정수 3을 넣어보자. (p는 int형이라 가정)
*p = 3;
100번지 집(주소)에 찾아가서, 3이라는 변수를 집어넣는다고 생각하면 된다.
여러 가지 자료형의 포인터
포인터는 여러 가지 자료형을 가질 수 있다.
char *p1; // p1은 char형 변수를 가리킴
double *p2; // p2는 double형 변수를 가리킴
int *p3; // p3은 int형 변수를 가리킴
float *p4; // p4는 float형 변수를 가리킴
널(NULL) 포인터
널 포인터는 아무것도 가리키지 않는 포인터다. 일반적으로 NULL이라는 매크로로 표시한다.
포인터를 사용하기 전엔, 이 포인터가 NULL인지를 검사해야 한다.
if(p == NULL) {
fprintf(stderr, "오류! 포인터가 아무 것도 가리키지 않는 상태입니다.");
exit(1);
}
이렇게 오류를 체크하는 느낌으로 사용된다.
포인터가 실제로 아무 것도 가리키지 않을 때, 널 포인터로 두면 좋다.
널 포인터를 가지고 간접참조하려면 시스템에서 오류가 나 쉽게 알 수 있기 때문이다.
함수의 매개변수로 포인터 사용
포인터는 함수의 매개변수로 전달될 수 있다.
swap.c 를 한번 구현해보자.
#include <stdio.h>
void swap(int *px, int *py)
{
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
}
int main(void)
{
int a = 1, b = 2;
printf("swap 호출 전 : a = %d, b = %d\n", a, b);
swap(&a, &b); // *px는 주소 a를 가리키고, *py는 주소 b를 가리키게 된다.
printf("swap 호출 후 : a = %d, b = %d", a, b);
return 0;
}
결과 :
swap 호출 전 : a = 1, b = 2
swap 호출 후 : a = 2, b = 1
배열 + 포인터
함수로 배열이 전달되면, 함수 안에서 배열의 내용을 변경할 수 있다.
배열의 이름이 배열의 시작위치를 가리키는 포인터이기 때문.
다음 장에는 배열 포인터 관련된 과제를 알아보자.
'✍🏻배움일지 > 자료구조' 카테고리의 다른 글
[자료구조] 수행시간 측정 (6) | 2023.11.06 |
---|---|
[자료구조] 순환(recursion) / 반복(iteration) (12) | 2023.10.25 |
[자료구조] 4. 배열의 응용 : 다항식 (0) | 2023.10.22 |
[자료구조] 3. C언어 배열과 구조체 (0) | 2023.10.22 |
[자료구조] 2. 자료구조 기본 개념 (2) | 2023.10.21 |
댓글
이 글 공유하기
다른 글
-
[자료구조] 수행시간 측정
[자료구조] 수행시간 측정
2023.11.06 -
[자료구조] 순환(recursion) / 반복(iteration)
[자료구조] 순환(recursion) / 반복(iteration)
2023.10.25 -
[자료구조] 4. 배열의 응용 : 다항식
[자료구조] 4. 배열의 응용 : 다항식
2023.10.22 -
[자료구조] 3. C언어 배열과 구조체
[자료구조] 3. C언어 배열과 구조체
2023.10.22