ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.