#include <stdio.h>
void printf_test(char* fmt,...);//参数可变的函数声明
void main()
{
int a=23,c=99;
char b='c';
printf_test("%d,%c,%d",a,b,c);//用四个参数做测试
}
void printf_test(char* fmt,...) //参数可变的函数定义,注意第一个参数为char* fmt
{
char *p,*p0;
//注意不是指向fmt,而是指向&fmt,并且强制转化为char *,以便一个一个字节访问
p=p0=(char *)&fmt;
p+=4;
char *str=fmt;
while(*str!='\0')
{
if(*str!='%')
{
putchar(*str);
str++;
}
else
{
str++;
switch(*str)
{
case 'd':
{
printf("%d",(int)(*p) );
p+=4;
break;
}
case 'c':
{
putchar(*p);
p+=4;
break;
}
default:
{
putchar(*str);
break;
}
}//switch(*str)
str++;
}
}
putchar('\n');
int *pn=(int *)(p0+4);
printf("%d\n",*pn);
char *pc=(char*)(pn+1);
printf("%c\n",*pc);
pn=(int *)(pc+4);
printf("%d\n",*pn);
}
//输出
/*
23,c,99
23
c
99
Press any key to continue
*/