뭔가 이해한 것 같으면 새로운 게 생겨나는 포인터...
포인터에 대해 차근차근 알아보자.
1. 포인터 개념
C언어에서 포인터(pointer)란 메모리의 주소값을 저장하는 변수이며, 포인터 변수라고도 부른다.
char형 변수가 문자를 저장하고, int형 변수가 정수를 저장하는 것처럼 포인터는 주소값을 저장한다.
2. 표기
int n = 100; //변수 선언
int *ptr = &n; //포인터 선언
포인터 연산자
C언어에서 포인터와 연관되어 사용되는 연산자는 다음과 같다.
1. 주소 연산자(&)
2. 참조 연산자(*)
주소 연산자(&)
주소 연산자는 변수의 이름 앞에 사용하여, 해당 변수의 주소값을 반환한다.
'&'기호는 앰퍼샌드(ampersand)라고 읽으며, 번지 연산자라고도 부른다.
참조 연산자(*)
참조 연산자는 포인터의 이름이나 주소 앞에 사용하여, 포인터에 가리키는 주소에 저장된 값을 반환한다.
C언어에서 '*'기호는 사용하는 위치에 따라 다양한 용도로 사용된다.
이항 연산자로 사용하면 곱셈 연산으로 사용되며, 포인터의 선언 시나 메모리에 접근할 때도 사용된다.
포인터의 선언
C언어에서 포인터는 다음 문법에 따라 선언한다.
문법
타입* 포인터이름;
타입이란 포인터가 가리키고자 하는 변수의 타입을 명시한다.
포인터 이름은 포인터가 선언된 후에 포인터에 접근하기 위해 사용된다.
포인터를 선언한 후 참조 연산자(*)를 사용하기 전에 포인터는 반드시 먼저 초기화되어야 한다.
그렇지 않으면 의도하지 않은 메모리의 값을 변경하게 되기 때문이다.
따라서 C 컴파일러는 초기화하지 않은 포인터에 참조 연산자를 사용하면 오류를 발생시킨다.
따라서 다음과 같이 포인터의 선언과 동시에 초기화를 함께 하는 것이 좋다.
문법
타입* 포인터이름 = &변수이름;
또는
타입* 포인터이름 = 주소값;
포인터의 참조
C언어에서 선언된 포인터는 참조 연산자(*)를 사용하여 참조할 수 있다.
다음 예제는 포인터의 주소값과 함께 포인터가 가리키고 있는 주소값의 데이터를 참조하는 예제이다.
int x = 7; // 변수의 선언
int *ptr = &x; // 포인터의 선언
int *pptr = &ptr; // 포인터의 참조
'개발 노트 (C언어)' 카테고리의 다른 글
Stack Overflow 왜 발생하는가? #스택 #큐 (0) | 2024.05.15 |
---|---|
[C언어] 비트 연산 및 비트 시프트 (0) | 2024.04.13 |