void va_start(va_list ap, last);
在va_list pa
中保存有关被调用函数不知道其数量和类型的参数的一些信息。以后的参数可以通过va_arg()
提取。
文档未指定va_list pa
内容的放置方式
简而言之:我需要知道它是如何被保存在记忆中的。它的记忆表示。
#include<stdarg.h>
#include<stdio.h>
int sum(int, ...);
int main(void)
{
printf("Sum of 10, 20 and 30 = %d\n", sum(3, 10, 20, 30) );
return 0;
}
int sum(int num_args, ...)
{
int val = 0;
va_list ap;
int i;
va_start(ap, num_args);
for(i = 0; i < num_args; i++)
{
val += va_arg(ap, int);
}
va_end(ap);
return val;
}
pa中存储了哪些信息?对于上面的例子,它在内存中的表现如何?
从上面的例子中它知道类型是int
而不是其他什么?
答案 0 :(得分:1)
它依赖于实现。有时,va_list
只是char*
。基本上,ap
表示一个指向字符的指针数组。调用va_arg(ap, TYPE)
时,它会从ap
点的地址读取内存,但会将其读取为TYPE
类型。因此,如果您使用int
调用它,它将读取4个字节并将其转换为int
类型。