#include <stdio.h>
int main(void){
int a = 10;
double b = 3.5;
void *vp;
vp = &a;
printf("a : %d\n", *(int *)vp);
vp = &b;
printf("b ; %.1lf\n", *(double *)vp);
return 0;
}
이 코드는 `void` 포인터의 사용법을 설명하는 예제입니다. `void` 포인터는 특정 타입이 정해지지 않은 포인터로, 어떠한 타입의 주소도 저장할 수 있습니다. 이 코드에서는 `void` 포인터를 사용하여 정수형 변수 `a`와 실수형 변수 `b`의 주소를 순차적으로 저장하고, 이를 다시 역참조하여 값을 출력합니다.
### 코드 설명
- `int a = 10;`와 `double b = 3.5;`를 통해 정수형 변수 `a`와 실수형 변수 `b`를 선언하고 각각 10과 3.5로 초기화합니다.
- `void *vp;`는 타입이 정해지지 않은 `void` 포인터 `vp`를 선언합니다.
- `vp = &a;`는 `vp`에 `a`의 주소를 할당합니다. `void` 포인터는 어떤 타입의 주소든 저장할 수 있기 때문에, `int` 타입인 `a`의 주소를 저장하는 데 문제가 없습니다.
- `printf("a : %d\n", *(int *)vp);`에서는 `vp`를 `int *` 타입으로 명시적으로 형 변환하고 역참조하여 `a`의 값을 출력합니다. 이 과정에서 `void` 포인터를 `int` 포인터로 변환해야 `a`의 실제 값에 접근할 수 있습니다.
- `vp = &b;`에서는 `vp`에 `b`의 주소를 할당합니다. 이 때도 `void` 포인터의 범용성 덕분에 `double` 타입인 `b`의 주소를 저장할 수 있습니다.
- `printf("b : %.1lf\n", *(double *)vp);`에서는 `vp`를 `double *` 타입으로 명시적으로 형 변환하고 역참조하여 `b`의 값을 출력합니다. `void` 포인터를 `double` 포인터로 변환함으로써 `b`의 실제 값에 접근합니다.
### 결과
이 프로그램은 두 변수 `a`와 `b`의 값을 성공적으로 출력합니다:
```
a : 10
b : 3.5
```
'개념 > 혼자 공부하는 C언어' 카테고리의 다른 글
chapter 15) 함수 포인터로 원하는 함수를 호출하는 방법 (0) | 2024.09.18 |
---|---|
chapter 15) 함수 포인터를 사용한 함수 호출 (0) | 2024.09.17 |
chapter 15) 포인터와 이중 포인터의 관계 (0) | 2024.09.15 |
chapter 15) 포인터 배열의 값을 출력하는 함수 (0) | 2024.09.14 |
chapter 15) 주소로 쓰이는 배열명과 배열의 주소 비교 (0) | 2024.09.13 |