C 언어에서 포인터와 포인터 변수
포인터 (Pointer)란?
포인터는 메모리 주소를 저장하는 변수입니다. 일반 변수는 특정 데이터를 저장하지만, 포인터는 데이터가 저장된 메모리 주소를 가리킵니다. 포인터를 통해 특정 변수의 주소를 참조하거나, 해당 주소에 저장된 데이터에 접근할 수 있습니다.
포인터 변수 (Pointer Variable)
포인터 변수는 데이터의 메모리 주소를 저장하는 변수로, 포인터와 동일한 의미로 사용됩니다. 포인터 변수를 선언할 때는 포인터가 가리키는 데이터의 타입을 명시해주어야 합니다.
예를 들어, int
타입 변수를 가리키는 포인터 변수는 다음과 같이 선언합니다:
int *ptr;
포인터 변수의 선언과 사용
- 포인터 변수 선언
int *ptr; // int 타입 포인터 변수 ptr 선언 float *fptr; // float 타입 포인터 변수 fptr 선언 char *cptr; // char 타입 포인터 변수 cptr 선언
- 주소 저장과 참조 연산자 (&)
포인터 변수에 특정 변수의 주소를 저장할 때는 참조 연산자(&)를 사용합니다. 예를 들어,
int a = 10;
일 때,ptr = &a;
라고 하면ptr
에는 변수a
의 주소가 저장됩니다. - 포인터 값 접근과 역참조 연산자 (*)
포인터가 가리키는 주소의 값에 접근할 때는 역참조 연산자(*)를 사용합니다. 예를 들어,
*ptr
은ptr
이 가리키는 주소에 저장된 값을 의미합니다.int a = 10; int *ptr = &a; printf("%d\n", *ptr); // a의 값인 10이 출력됨
포인터의 활용 예시
1. 포인터와 배열
배열의 이름은 배열의 첫 번째 요소의 주소를 가리키는 포인터로, 배열과 포인터는 밀접한 관계가 있습니다.
int arr[3] = {1, 2, 3};
int *ptr = arr; // arr은 첫 번째 요소의 주소를 의미
printf("%d\n", *(ptr + 1)); // arr[1]의 값인 2를 출력
2. 포인터와 함수 인자
C 언어에서 함수에 변수를 포인터로 전달하면 원본 변수를 수정할 수 있습니다. 이를 Call by Reference라고 합니다.
void update(int *num) {
*num = 20; // num이 가리키는 변수의 값을 20으로 수정
}
int main() {
int a = 10;
update(&a); // a의 주소를 전달
printf("%d\n", a); // 20 출력
return 0;
}
3. 동적 메모리 할당
C 언어에서 메모리를 동적으로 할당하려면 포인터를 사용해야 합니다. malloc
, calloc
, free
등의 함수를 통해 동적 메모리 할당을 관리할 수 있습니다.
int *ptr = (int*) malloc(sizeof(int) * 5); // int 5개 크기의 메모리 할당
if (ptr != NULL) {
ptr[0] = 10;
free(ptr); // 동적 할당 메모리 해제
}
포인터와 포인터 변수를 공부하는 이유
- 메모리 관리의 이해: 포인터는 메모리 주소를 직접 다루므로, C 언어에서 메모리를 효율적으로 관리하고 최적화하는 방법을 배우는 데 필수적입니다.
- 성능 향상: 포인터는 변수나 데이터 구조를 효율적으로 참조하여 프로그램의 성능을 높일 수 있습니다.
- 동적 데이터 구조 구현: 포인터는 연결 리스트, 트리 등 동적 데이터 구조를 구현하는 데 필수적입니다.
- 함수에서 데이터 전달 효율화: 포인터를 통해 큰 데이터 구조를 함수로 전달할 때, 불필요한 메모리 복사를 피하고 원본 데이터를 수정할 수 있습니다.
C 언어의 포인터는 강력한 기능을 제공하는 동시에 올바르게 사용하지 않으면 메모리 누수나 잘못된 접근으로 인해 오류가 발생할 수 있습니다. 따라서 포인터의 개념을 정확히 이해하고 사용하는 것이 중요합니다.
'데이터 > IT 조금 전문적으로' 카테고리의 다른 글
Bluehost.com 에서 웹 호스팅 방법 (0) | 2025.01.02 |
---|---|
Python에서 Range와 Slice 사용 예제 (0) | 2024.11.13 |
C 언어에서 배열과 2차원 배열, 그리고 파이썬에서 NumPy (0) | 2024.11.13 |
SQL 기본 문법 이해하기: 데이터베이스 입문자를 위한 가이드 (0) | 2024.10.24 |
자바로 GUI(그래픽 사용자 인터페이스) 프로그램 만드는 방법 (0) | 2024.10.22 |