C 언어 학습: 포인터
포인터는 C 언어에서 매우 중요한 개념으로, 메모리 주소를 다루는 데 사용됩니다. 이번 글에서는 포인터 개념, 포인터와 배열, 포인터와 문자열, 그리고 포인터와 함수(함수 포인터)에 대해 알아보겠습니다.
1. 포인터 개념
포인터는 변수의 메모리 주소를 저장하는 변수입니다. 포인터를 선언하려면 변수 자료형 앞에 *를 붙입니다. 포인터의 기본 사용법은 다음과 같습니다.
int main() {
int var = 10;
int *ptr = &var; // 포인터 ptr은 변수 var의 주소를 저장
printf("var의 값: %d\n", var);
printf("ptr이 가리키는 값: %d\n", *ptr); // 포인터를 통해 변수 var의 값에 접근
return 0;
}
위의 예제에서 int *ptr은 정수를 가리키는 포인터를 선언합니다. &var는 변수 var의 주소를 반환합니다. *ptr을 통해 포인터가 가리키는 변수의 값에 접근할 수 있습니다.
2. 포인터와 배열
배열의 이름은 배열의 첫 번째 요소의 주소를 가리키는 포인터로 해석됩니다. 배열과 포인터의 관계는 다음과 같습니다.
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // 배열 이름은 첫 번째 요소의 주소를 가리킴
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d, *(ptr + %d) = %d\n", i, arr[i], i, *(ptr + i));
}
return 0;
}
위의 예제에서 int *ptr = arr은 배열 arr의 첫 번째 요소의 주소를 ptr에 저장합니다. *(ptr + i)를 통해 배열의 요소에 접근할 수 있습니다.
3. 포인터와 문자열
문자열은 문자 배열로 표현되며, 문자열을 가리키는 포인터를 사용할 수 있습니다. 문자열과 포인터의 사용 예는 다음과 같습니다.
int main() {
char str[] = "Hello, World!";
char *ptr = str; // 문자열 포인터
printf("문자열: %s\n", ptr);
// 포인터를 사용하여 각 문자 출력
while (*ptr != '\0') {
printf("%c", *ptr);
ptr++;
}
printf("\n");
return 0;
}
위의 예제에서 char *ptr = str은 문자열 str의 첫 번째 문자의 주소를 ptr에 저장합니다. *ptr을 통해 각 문자에 접근하고, ptr++을 통해 다음 문자로 이동합니다.
4. 포인터와 함수 (함수 포인터)
함수 포인터는 함수의 주소를 저장하는 포인터입니다. 이를 통해 함수를 호출할 수 있으며, 함수 포인터의 사용 예는 다음과 같습니다.
// 함수 선언
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
int main() {
int (*func_ptr)(int, int); // 함수 포인터 선언
func_ptr = add; // add 함수의 주소를 함수 포인터에 저장
printf("add(3, 4) = %d\n", func_ptr(3, 4)); // 함수 포인터를 사용하여 함수 호출
func_ptr = multiply; // multiply 함수의 주소를 함수 포인터에 저장
printf("multiply(3, 4) = %d\n", func_ptr(3, 4)); // 함수 포인터를 사용하여 함수 호출
return 0;
}
위의 예제에서 int (*func_ptr)(int, int)은 두 개의 정수를 매개변수로 받고 정수를 반환하는 함수 포인터를 선언합니다. func_ptr에 add 함수와 multiply 함수의 주소를 각각 할당하여, 함수 포인터를 통해 해당 함수를 호출할 수 있습니다.
이번 글에서는 C 언어의 포인터에 대해 알아보았습니다. 포인터는 메모리 주소를 직접 다루는 강력한 도구로, C 언어에서 중요한 역할을 합니다. 다음 시간에는 구조체와 포인터에 대해 자세히 다뤄보겠습니다. C 언어 학습에 많은 도움이 되길 바랍니다. Happy Coding!
'프로그래밍 > C' 카테고리의 다른 글
[C] 9. C언어의 "파일 입출력(기타)" (2) | 2024.06.13 |
---|---|
[C] 8. C언어의 "구조체" (0) | 2024.06.13 |
[C] 6. C언어의 "배열과 문자열" (0) | 2024.06.12 |
[C] 5. C언어의 "함수" (0) | 2024.06.12 |
[C] 4. C언어의 "조건문과 반복문" (0) | 2024.06.12 |