Basic C Language / C언어의 포인터(Pointer)

Geewon Kim·2024년 1월 14일

Clang

목록 보기
5/13

Pointer

포인터는 C 언어에서 매우 중요한 개념 중 하나로, 메모리 주소를 저장하고 조작하는 데 사용됩니다.

1. 포인터의 선언 및 초기화

포인터는 다양한 데이터 타입을 가리킬 수 있습니다. 포인터를 선언할 때는 해당 데이터 타입에 대한 포인터임을 나타내기 위해 * 연산자를 사용합니다.

int *intPtr;       // 정수형 포인터 선언
double *doublePtr; // 실수형 포인터 선언
char *charPtr;     // 문자형 포인터 선언

포인터는 해당 데이터 타입의 메모리 주소를 저장하므로, 초기화를 위해 변수의 주소를 할당할 수 있습니다.

int num = 42;
int *ptr = # // 포인터를 변수 num의 주소로 초기화

2. 포인터를 이용한 값의 역참조

포인터는 메모리 주소를 저장하는 변수이지만, 역참조(* 연산자 사용)를 통해 해당 주소에 저장된 값을 읽거나 수정할 수 있습니다.

int value = *ptr; // 포인터가 가리키는 주소의 값을 가져옴

3. 포인터 산술

포인터는 산술 연산이 가능합니다. 주로 배열과 함께 사용되며, 배열의 각 요소에 접근하는 데 사용됩니다.

int arr[5] = {1, 2, 3, 4, 5};
int *arrPtr = arr; // 배열의 첫 번째 요소를 가리키는 포인터

// 포인터 산술을 이용한 배열 요소 접근
for (int i = 0; i < 5; ++i) {
    printf("%d ", *(arrPtr + i));
}
// 출력: 1 2 3 4 5

4. 동적 메모리 할당과 해제

포인터를 사용하여 메모리 동적 할당이 가능합니다. 이는 프로그램 실행 중에 필요한 만큼의 메모리를 할당하고 해제할 수 있게 해줍니다.

int *dynamicPtr = (int *)malloc(sizeof(int)); // int 크기의 메모리 동적 할당
*dynamicPtr = 10; // 동적으로 할당된 메모리에 값 저장

printf("Dynamic Value: %d\n", *dynamicPtr);
// 출력: Dynamic Value: 10

free(dynamicPtr); // 메모리 해제

5. 포인터와 배열

포인터와 배열은 밀접한 관련이 있습니다. 배열 이름은 해당 배열의 첫 번째 요소를 가리키는 포인터로 해석됩니다.

int arr[3] = {10, 20, 30};
int *arrPtr = arr; // 배열의 첫 번째 요소를 가리키는 포인터

printf("%d\n", arrPtr[1]); // 배열 요소에 접근
// 출력: 20

6. 이중 포인터

이중 포인터는 다른 포인터를 가리키는 포인터입니다. 메모리의 이중 간접 참조를 가능하게 합니다.

int num = 42;
int *ptr1 = &num;
int **ptr2 = &ptr1; // 이중 포인터

printf("%d\n", **ptr2); // 이중 간접 참조
// 출력: 42

포인터는 C 언어에서 메모리 관리와 다양한 데이터 구조를 구현하는 데 필수적인 요소이며, 실제로 포인터를 다루는 데에는 조심스러움이 필요합니다. 메모리 누수와 관련된 문제를 피하기 위해 항상 동적으로 할당한 메모리를 적절하게 해제해야 합니다.

profile
내 지식의 외장하드

0개의 댓글