关于C语言printf函数参数入栈图解和栈的问题

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

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

 
举个例子如果要实现求多个数的平均值,因为C中不允许默认参数所以只能用上述方法进行求平均数,代码洳下
 
如果要求多个数的最大值可以写为
 
由此我们还可以用stdarg这个宏来模拟printf函数参数入栈图解的实现这里我只是做了模拟了字符串输出,整形与字符型输出代码如下:
val++; //指针变量向下偏移一个单位
val++; //指向头一变量的下一个字符
 
这里写得还差很多比如说%后面加数字的话是没办法识別并且寇冲输出空间的,而且这代码自己看着就比较low希望大神给出些建议。

我要回帖

更多关于 printf函数参数入栈图解 的文章

 

随机推荐