개요
알고리즘은 선행 지식으로 자료구조에 대한 이해를 필요로 한다.
자료구조의 경우엔 포인터에 대한 사전 지식이 있다면 이해하기 좋다.
본 글에서는 C언어의 포인터 변수에 대한 아주 기초적인 내용을 다룬다.
Pointer란?
C언어에서 포인터는 '메모리의 주소를 저장하는 변수' 이다.
'&' operator는 어떤 변수의 주소를 받아올 수 있다.
'*' operator는 참조한 값을 다시 역으로 따라간다.
포인터는 기본적으로 4byte를 할당받는다.
이렇게 설명하면 어려울 수 있으니 예제코드와 함께 설명하겠다.
#include <stdio.h>
int main()
{
char a = 'A';
char* pointer = &a;
printf("%c %p\n", a, pointer);
printf("%p %p\n", &a, &pointer);
printf("%d %d\n", sizeof(a), sizeof(pointer));
return 0;
}
먼저 문자형 변수 a와 a의 주소값을 가르키는 pointer 변수를 선언했다.
첫 번째 printf 문에서는 a의 문자와 pointer가 가르키고 있는 주소를 출력했다.
두 번째 printf 문에서는 a의 주소와 pointer의 주소를 출력했다.
세 번째 printf 문에서는 a와 pointer의 크기를 출력했다.
컴파일 결과이다. 메모리에 어떤 주소를 할당받느냐에 따라 결과는 다를 수 있다.
pointer 변수가 가르키고 있는 주소값과 변수 a의 주소가 같게 출력되는 것을 확인할 수 있다.
두 번째 printf문을 통해서 a의 주소값과 pointer 변수의 주소는 서로 다르다는 것을 알 수 있다.
변수의 size는 각각 1과 4임을 확인할 수 있다.
이제 포인터 변수를 통해 a변수 안의 값을 참조해 보겠다.
#include <stdio.h>
int main()
{
char a = 'A';
char* pointer = &a;
printf("%c %c\n", a, *pointer);
*pointer = 'B';
printf("%c %c\n", a, *pointer);
return 0;
}
위의 코드에서 살짝 수정한 예제 코드이다.
* operator를 통해서 주소값에 해당하는 변수를 참조할 수 있다.
첫 번째 printf 문에서는 변수 a의 문자와 변수 pointer가 참조하는 값을 출력했다.
후에 변수 pointer가 참조하는 값을 B로 선언했다.
선언 후 다시 a의 문자와 변수 pointer가 참조하는 값을 출력한다. 결과가 어떻게 나오게 될까.
컴파일 결과이다.
변수 pointer가 참조하는 값을 B로 선언하자 a변수의 값이 바뀌는 것을 확인할 수 있다.
위의 예제들을 통해 pointer변수는 어떻게 메모리 공간을 할당받는지, 어떻게 변수의 주소값을 따라가는지, 가르키는 변수에 참조는 어떻게 하는지 알 수 있다.
'CS > 자료구조(data structure)' 카테고리의 다른 글
[자료구조] 트리(Tree) 기본 (2) | 2023.01.10 |
---|---|
[자료구조] 스택과 큐를 이용하여 회문 판별 프로그램 만들기(C++) (0) | 2022.12.30 |
[자료구조] 큐(Queue)란? (0) | 2022.12.30 |
[자료구조] 스택(Stack)이란? (1) | 2022.12.27 |
[자료구조] 연결리스트(Linked List)란? (0) | 2022.12.26 |