700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言int val c语言不定参数与printf函数的实现

c语言int val c语言不定参数与printf函数的实现

时间:2023-05-02 17:25:46

相关推荐

c语言int val c语言不定参数与printf函数的实现

今天学习了C语言不定参数,C语言中的不定参数主要靠这个头文件实现,这个头文件包含了va_list()、va_start()、va_end()三个宏,其用法为先声明一个va_list类型的变量,它用于访问参数列表未确定的部分。这个变量是由va_start来初始化的。它的第一个参数是va_list的变量名,第二个参数是省略号前最后一个有名字的参数。初始化过程把va_list的变量设置为指向可变参数的第一个参数。

为了访问参数,需要使用va_arg,这个宏接受两个参数(va_list变量和参数列表中下一个参数的类型)访问完最后一个参数,需要调用va_end(),其格式如下:voidfun(inta,...)

{

va_listparameter;

va_start(parameter,a);

va_arg(parameter,int);

}

举个例子,如果要实现求多个数的平均值,因为C中不允许默认参数,所以只能用上述方法进行求平均数,代码如下intaverage(intval,...)

{

va_listarg;

intsum=0;

inti=0;

va_start(arg,val);

//va_arg();

for(i=0;i

{

sum+=va_arg(arg,int);//每调用一次向下取一个

}

va_end(arg);

returnsum/val;

}

如果要求多个数的最大值可以写为intaverage(intval,...)

{

va_listarg;

intmax;

intsum=0;

inti=0;

va_start(arg,val);

for(i=0;i

{

sum=va_arg(arg,int);

if(sum>max)

max=sum;

}

va_end(arg);

returnmax;

}

由此我们还可以用stdarg这个宏来模拟printf函数的实现,这里我只是做了模拟了字符串输出,×××与字符型输出代码如下:#include

#include

voidprintd(intn)//把×××按字符型输出

{

if(n

{

putchar('-');

}

if(n)

{

printd(n/10);

putchar(n%10+'0');

}

}

voidmy_printf(char*val,...)

{

intch;

va_listarg;

va_start(arg,val);

while(*val!='\0')

{

switch(*val)

{

case'%'://遇到%执行switchcase语句

{

if(*(val+1)=='c')//输出字符

{

ch=va_arg(arg,char);

putchar(ch);

val++;//指针变量向下偏移一个单位

}

elseif(*(val+1)=='d')

{

ch=va_arg(arg,char);//输出×××

printd(ch);

val++;

}

elseif(*(val+1)=='s')//输出字符串

{

char*p=va_arg(arg,char*);

while(*p!='\0')

{

putchar(*p);

p++;

}

val++;//指向头一变量的下一个字符

}

else

putchar('%');

break;

}

default:

{

putchar(*val);

break;

}

}

val++;

}

va_end(arg);

}

intmain()//程序调试

{

intc=100;

char*p="laomasb";

chara='c';

my_printf("%s\n%d\n%c\n",p,c,a);

system("pause");

return0;

}

这里写得还差很多,比如说%后面加数字的话是没办法识别并且寇冲输出空间的,而且这代码自己看着就比较low。希望大神给出些建议。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。