我刚刚开始学习c而我正在尝试创建一个函数,当我知道所有参数来自同一类型时,它从堆栈中获取它的参数,但它只适用于int。
这就是我所做的:
void Test1(double first_arg, ...)
{
double *a = &first_arg;
printf("arg[0]: %f\narg[1]: %f \narg[2]: %f\n", a[0], a[1], a[2]);
}
void Test2(int first_arg, ...)
{
int *a = &first_arg;
printf("arg[0]: %d\narg[1]: %d \narg[2]: %d\n", a[0], a[1], a[2]);
}
int main()
{
printf("Test1:\n");
Test1(1.0, 2.0, 3.0);
printf("\nTest2:\n");
Test2(1, 2, 3);
return 0;
}
Console:
Test1:
arg[0]: 1.000000
arg[1]: 0.000000
arg[2]: 0.000000
Test2:
arg[0]: 1
arg[1]: 2
arg[2]: 3
我在这里缺少什么?我该怎么做才能解决这个问题。
答案 0 :(得分:3)
参数传递给函数的方式取决于实现。要以可移植的方式读取变量参数,您需要使用stdarg
函数族。
#include <stdio.h>
#include <stdarg.h>
void Test1(double first_arg, ...)
{
printf("arg[0]=%f\n", first_arg);
va_list ap;
va_start(ap, first_arg);
double arg1 = va_arg(ap, double);
printf("arg[1]=%f\n", arg1);
double arg2 = va_arg(ap, double);
printf("arg[2]=%f\n", arg2);
va_end(ap);
}
int main()
{
printf("Test1:\n");
Test1(1.0, 2.0, 3.0);
return 0;
}