본문 바로가기

2014 C/4월

2014.04.01

Void포인터와 함수포인터


void 포인터

#include <stdio.h>

int main()
{
  void * vp;
  int iNum = 500;
  char cNum = 100;

  vp = &iNum;
  vp = &cNum;
  // void타입이라 자료형의 타입은 무시한다. 고로 워링에러가 안뜬다.
  //왠만한 주소를 다 가르킬 수 있는데 제대로 된 기능은 없다.


  //Error!!  
  /*   *vp = 99;    */
  //void포인터를 vp의 포인터값을 따라가는데 void가 없다라는 뜻이라서 대입이 불가능.


  //정상 작동!!
  *((char * )vp) = 99;
  //임시적으로 char * 로 지정 


  printf("%d\n", *((char * )vp)); //포인터이기 때문에 자료형을 알려주어야함
  printf("%d\n",cNum);          //---->    똑같은값
                     //printf("%d\n",*vp) 에러!

  return 0;

} 






함수포인터


함수의 원형으로!! int 자료형이면 int (*)();가 공식적...

#include <stdio.h>

void test();

int main()
{

  void (*fp)(); //포인터 선언 = = int * iNum; 과 동급
  fp=test;  //포인터 대입 iNum = &iCnt;와 동급
  fp();  //함수호출

  return 0;
}

void test() 
{

  int (*fp)(const char * , ...) = printf; //printf 함수의 원형 int(*)(const char *, ...)

  (*fp)("어려운거\n");
  fp("쉬운거");

} 

#include <stdio.h>

int main()
{
  
  int (*fp)(const char * , ...) = printf;  //포인터 선언 = = int * num; 과 동급
  int iNum;
  (*fp)("숫자를 입력하세요.");  //포인터 printf 함수로 printf사용하는 방법
  //fp("숫자를 입력하세요.");
  
  fp = scanf;
  (*fp)("%d",&iNum);
  //fp("%d",&iNum);
  
  fp = printf;

  (*fp)("입력하신숫자는 %d입니다.");
  //fp("입력하신숫자는 %d입니다.");

  return 0;

} 




'2014 C > 4월' 카테고리의 다른 글

2014.04.08  (0) 2014.04.08
2014.04.07  (0) 2014.04.07
2014.04.04  (0) 2014.04.04
2014.04.03  (0) 2014.04.03
2014.04.02  (1) 2014.04.02