포인터 Pointer

Gogi·2023년 5월 16일

C언어 기초 목록

목록 보기
14/23

주소의 활용과 데이터 접근

포인터는 메모리 주소를 저장하고, 해당 주소에 저장된 값에 접근하는 데 사용된다. 이를 활용하면 메모리에 효율적으로 접근 가능하고 어디서든 변수의 값을 조작할 수 있다.


개념 설명

1. 포인터 변수

메모리 주소를 저장하는 변수로, 해당 주소에 있는 값에 직접 접근할 수 있다. 포인터 변수를 선언할 때는 변수 이름 앞에 *를 붙인다
ex: int *ptr;


2. 주소 연산자

주소 연산자&변수의 주소를 구하는 데 사용된다. 변수 이름 앞에 붙여 사용한다.

ex: int num = 10; int *ptr = #


3. 역참조 연산자

역참조 연산자*는 포인터가 가리키는 주소에 저장된 값을 가져오는 데 사용된다. 변수 이름 앞에 붙여 사용한다.

ex: int value = *ptr;


4. 포인터 증감 연산

포인터 변수를 증가 또는 감소시켜 다음 또는 이전 주소로 이동할 수 있다. 예를 들어 arr 배열 변수의 주소를 할당한 포인터 변수라면, 해당 배열의 인덱스에 있는 값을 순차적으로 접근할 수 있다.
ex: ptr++; ptr--;


5. 포인터와 배열의 상호 변환

배열은 포인터로 암시적으로 변환될 수 있으며, 포인터 또한 배열로 변환될 수 있다. 배열의 이름은 포인터 상수로 간주되므로 배열을 가리키는 포인터로 사용이 가능하다.
ex : arr[i] == *(arr + i)


6. 포인터 배열과 배열 포인터

포인터 배열은 포인터 요소의 배열이며, 배열 포인터는 배열을 가리키는 포인터다. 둘은 서로 다른 개념이며 각각의 용도와 특징을 잘 파악해야된다.
ex : 포인터 배열
int *arr[3] = {&num1, &num2, &num3};
ex : 배열 포인터
int arr[3] = {1, 2, 3};
int *ptr; = arr;


사용 예시

1. 포인터 변수 사용 예시

int num = 100;
// 정수형 num 변수의 값을 100 할당

int *ptr = #  
// num 변수의 주소를 ptr에 할당

printf("%d\n", *ptr);  
// ptr에 저장된 주소 값을 역참조하여 num 변수의 값 출력 100

2. 포인터로 배열 접근 예시

int array[3] = {1, 2, 3};
// 정수형 array 배열 변수의 값을 1, 2, 3 할당

int* ptr = array; // &array[0]; 같은 의미
// 배열의 첫 번째 요소 주소를 ptr에 할당

printf("%d\n", *ptr);  
// ptr에 저장된 주소 값을 역참조하여 배열의 첫 번째 요소 값 출력 1

3. 포인터 선언 예시

int number = 100;
int* ptr = &number;  // 포인터
int** dptr = &ptr;   // 더블 포인터
int*** tptr = &dptr; // 트리플 포인터

용어 설명

- 역참조 Dereference

포인터가 가리키는 주소에 저장된 값을 가져오는 작업을 의미한다.

- 요소 Element

배열에 각각 접근 가능한 값들을 의미한다. 배열은 연속적으로 메모리에 할당된 요소들의 집합이며, 각 요소는 인덱스를 갖고 있다. 인덱스란 요소들을 식별하기위한 숫자(상수)다.

- 인덱스 Index

배열에서의 위치를 가리키는 숫자를 인덱스라고 표현한다.


업데이트

2023년 5월 23일: 포인터와 배열의 상호 변환, 포인터 배열과 배열 포인터 내용 추가

2023년 5월 28일: arr -> array 오타 수정

profile
C, C++, C#, Unity

0개의 댓글