수업시간에 했던 내용인데 printf를 직접 구현하는건데 포인터는 아무리봐도 모르겠어요 ㅠㅠ 궁금한 내용은 주석 달아놓은 //Q.1 //Q.2 부분이에요
그리고 case 'd'는 적다가 다 못적었구요, case 's' 는 전혀 이해가 안되네요;; 설명좀 부탁드립니다.....
#include <stdio.h>
int nprintf(char * format, ...) { void *param; param = &format; ////////format의 주소값 //Q. format의 주소값? 그러면 param은 ** 이 되어야 하지 않나요? char *k; int i, j, x, y, z; char n[12]; // 2010 -> [2][0][1][0] //부호, Null 포함
while(*format) { if(*format=='%') { ++format; switch(*format) { case 'c': param=(char*) param+4; //1바이트 늘려야 함, ++하면 안됨(자료형을 모르기 때문에) //char 은 1바이트씩 움직이니까 char 로 캐스팅 //포인터는 대상의 크기만큼 증가 putchar (*(char*)param);//putchar (*param); 출력해야하는데 대상이 char의 포인터. 따라서 캐스팅. //Q. param이 가지고있는건 format의 주소값 아닌가요? break; case 'd': param=(char*) param+4; //ex)3500원 -> 1000*3 + 100*5 printf("%d\n", *(int *)param); i=0; if(*(int * )param<0) { n[0]='-'; i=1; } /* if(x<0) n[i++]='-'; */
else { i=0; }
for (j=1000000000; j>0; j=j/10) { x=*(int *)param / j; //나누기할때 자료형, 자리수 중요. //float c= int a/int b; if(x!=0) { n[i]=x+'0'; //아스키(48)로 출력. 문자는 숫자로 취급 가능 i++;
} } break;
case 's': //복잡함. 대상이 뭔지 파악 중요. param=(char*) param+4; k=*(char **)param;