四个参数做测试参数可变的函数

#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
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值