반응형
범용 포인터로서, 어떤 포인터 타입도 void*에 대입할 수 있다. C#의 object 타입과 비슷하다
#include <stdio.h>
int main(void)
{
/* 예시 배열 */
int arr[5] = {1, 2, 3, 4, 5};
/* void* 포인터에 arr의 주소를 저장 */
void *vp = arr;
/* arr의 합계를 구하려면, int*로 캐스팅해야 함 */
int sum = 0;
for (int i = 0; i < 5; i++) {
/* (int*)vp -> int*로 변환 후 [i] 접근 */
sum += ((int*)vp)[i];
}
printf("arr의 합계: %d\n", sum);
/* 다른 타입에도 바로 대입 가능 (단, 역참조 시 캐스팅 필수) */
double dval = 3.14;
vp = &dval;
/* vp를 double*로 캐스팅 후 역참조 */
printf("dval = %.2f\n", *((double*)vp));
return 0;
}
================ 실행 결과 ================
arr의 합계: 15
dval = 3.14
주의할 점으로, 역참조나 산술 연산 등. 정확한 바이트를 알아야 하는 연산을 진행할 땐 타입 캐스팅이 필요하다
Reference
'프로그래밍 > C, C++' 카테고리의 다른 글
C 언어 함수 포인터 (0) | 2025.04.10 |
---|---|
C 언어 공용체 (union) (0) | 2025.04.10 |
C 구조체와 비트 플래그 (0) | 2025.04.10 |
C 구조체 사용 시 포인터 저장 문제 (0) | 2025.04.09 |
C 언어의 구조체 (0) | 2025.04.09 |