如果我们不知道列表的开头,如何在没有指定参数的函数中初始化 ap ?
我需要创建一个函数来创建一组整数。因为我不知道没有。论点,我想到使用省略号。
void f1(...)
{
va_list ap;
//how to initialize ap as I don't know the last actual argument as there is no such argument!!!
}
另外,是否有其他方法可以知道列表是否已结束,而不是提供最后一个参数以及表示列表末尾的值???
请帮忙!!!
I need to create a function to create a set of integers. As I don't know the no. of arguments, I thought of using the ellipses.
void f1(...)
{
va_list ap;
//how to initialize ap as I don't know the last actual argument as there is no such argument!!!
}
Also, is there any other way to know whether the list has ended instead of supplying a last argument with a value that denotes the end of list????
Please help!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是使用 va_list 的示例 。如果传递一个数组和一个计数而不是 var args,可以获得相同的效果,如下所示:
Here is an example of using va_list. You can get the same effect if you pass an array and a count instead of var args, like this:
让我们稍微重写一下你的函数。
现在,可以通过以下方式调用:
但请注意,每个调用站点的参数数量都是已知的。另一种接口设计指定第一个参数中的参数数量:
但是,如果您需要在一次调用中指定任意数量的参数,那么您需要一个更像这样的接口:
这允许您指定第一个参数中的项目数量大批。
Let's rewrite your function a little.
Now, this can be invoked with:
Note, though, that the number of arguments is known at each call site. An alternative interface design specifies the number of parameters in the first argument:
However, if you need to specify an arbitrary number of arguments in a single call, then you need an interface more like:
This allows you to specify the number of items in the array.