c语言中如何实现可变参数

c语言函数库中有不少类似于printf,scanf的函数,这些函数接收的参数个数是不确定的。这些函数实际是通过<stdarg.h>文件中的va_list,va_start,va_arg,va_end宏定义是实现的。另外,,我们知道程序运行时的内存结构后,也可以通过直接访问这些内存空间获得实际参数值(事实上stdarg.h文件中的相关宏定义就是这么操作的)。

#include <stdio.h>#include <stdlib.h>#include <stdarg.h>int sum1(int nums);int sum2(int nums);int main(){int result1 = 0;int result2 = 0;result1 = sum1(5, 1, 2, 3, 4, 5);result2 = sum2(5, 1, 2, 3, 4, 5);printf("result1 is %d\n",result1);printf("result2 is %d\n",result2);system("pause");}//栈是从高地址到低地址生长的,c语言中函数参数是从右向左依次入栈的//c语言中入栈出栈是由函数调用者决定的(_ccall)//c++中入栈出栈是由函数本身负责的(_stdcall),c++中也支持可变参数,//但需要需要声明为int sum1(int nums,…)形式int sum1(int nums){int result = 0;int *argptr = &nums;//获得参数nums的地址for (int i = 0; i < nums; i++)result += *(++argptr);return result;}//利用<stdarg.h>中的va_list,va_start,va_end,va_arg宏定义实现int sum2(int nums){int result = 0;va_list argptr;va_start(argptr,nums);for (int i = 0; i < nums; i++)result += va_arg(argptr, int);va_end(argptr);return result;}程序运行结果如下

而你自己根本不想从中跑出来。学习啦分享旅行唯美心情说说语录,仅供参考!

c语言中如何实现可变参数

相关文章:

你感兴趣的文章:

标签云: