포인터
C언어에서 포인터는 메모리의 특정 주소를 가리키는 변수이다. 포인터를 사용하면 변수나 배열 등의 메모리 위치를 직접 조작할 수 있다. 포인터는 간접 참조, 동적 메모리 할당, 배열과 문자열 처리, 함수 인수로 배열을 전달하는 등의 다양한 용도로 사용된다.
포인터 선언
포인터를 선언할 때는 데이터 타입 뒤에 *을 붙인다.
int *ptr; // int형 변수를 가리키는 포인터
포인터 초기화
포인터 변수는 특정 변수의 주소를 할당 받아야 한다. 주소를 얻기 위해서는 주소 연산자 &를 사용한다.
int var = 10;
int *ptr = &var; // var의 주소를 ptr에 저장
포인터와 배열
배열의 이름은 포인터와 유사하게 작동하며, 배열 첫 번째 요소의 주소를 가리킨다.
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
printf("%d\n", *(ptr + 1)); // 2 출력
동적 메모리 할당
C언어에서는 malloc과 free 함수를 사용하여 동적으로 메모리를 할당하고 해제할 수 있다.
int *ptr = (int *)malloc(sizeof(int) * 5); // int형 5개 크기의 메모리 할당
if (ptr == NULL) {
// 메모리 할당 실패 처리
}
// 메모리 사용
for (int i = 0; i < 5; i++) {
ptr[i] = i;
}
// 메모리 해제
free(ptr);
ptr = NULL; // 포인터 초기화
포인터의 중요성
- 효율적인 메모리 사용: 포인터를 사용하면 메모리의 특정 위치를 직접 조작할 수 있어 효율적인 메모리 관리가 가능하다
- 동적 메모리 할당: 런타임에 메모리를 동적으로 할당하고 해제할 수 있다.
- 함수 인수로 사용: 배열이나 큰 구조체 함수에 전달할 때 포인터를 사용하면 값 복사 없이 주소만 전달하므로 성능이 향상된다.
- 복잡한 데이터 구조 표현: 연결 리스트, 트리, 그래프 등 복잡한 데이터 구조를 구현할 수 있다.
'C' 카테고리의 다른 글
[C] C언어 컴파일 과정 (0) | 2024.03.08 |
---|