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;
} |