-
C언어 void형 포인터Visual Studio/C 기초 2013. 8. 17. 17:10
void형 포인터는 함수의 매개변수를 선언하는 경우에 가장 많이 사용됩니다. 가끔 여러가지 형태의 인수를 받아들일 수 있는 함수를 만들 필요가 있을 것이고, 어떤 경우에는 함수에 int형을 전달하고 다른 어떤 경우에는 float형을 전달할 수 있습니다. 함수가 void형 포인터를 인수로 받아들이도록 선언하면 한 가지 데이터 형만을 받아들이도록 제한되지 않습니다.
void pnt(void *x);
이렇게 선언을 하면 어떤 형태의 포인터도 인수로 전달하여 함수를 호출할 수 있습니다. 하지만 어떤 형태의 데이터를 가리킬지 모르는 상태에서 void형의 포인터를 전달할 수 있지만 포인터가 가리키는 변수의 값을 사용할 수는 없습니다. 그래서 형변환이 필요합니다.
(type *)x;
여기서 type은 상황에 맞는 데이터형입니다. 만약 int형이라면
(int *)x;
x가 가리키는 int형 값을 사용하기 위해서는
*(int *)x;
이러한 문장을 작성합니다.
간단한 예제를 하나 들겠습니다.
#include <stdio.h>
void pnt(void *x, char type);
main(){
int i=20;
long l=100000;
float f=12.456;
double d=123.044444;printf("%d\n",i);
printf("%ld\n",l);
printf("%f\n",f);
printf("%lf\n\n",d);pnt(&i, 'i');
pnt(&l, 'l');
pnt(&f, 'f');
pnt(&d, 'd');
printf("%d\n",i);
printf("%ld\n",l);
printf("%f\n",f);
printf("%lf\n",d);}
void pnt(void *x, char type) //형변환
{
switch(type)
{
case 'i':
{
*((int*)x)/=2;
break;
}
case 'l':
{
*((long*)x)/=2;
break;
}
case 'f':
{
*((float*)x)/=2;
break;
}
case 'd':
{
*((double*)x)/=2;
break;
}
}
}'Visual Studio > C 기초' 카테고리의 다른 글
C언어 strftime() 변환 문자 표 (0) 2013.09.01 C언어 가변적인 함수 va_list, va_start(), va_arg(), va_end() (6) 2013.08.19 C언어 참조에 의한 전달 (0) 2013.07.04 strlwr() strupr() (0) 2013.07.04 strstr() (2) 2013.07.04