首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++中varargs的奇怪输出

C++中varargs的奇怪输出
EN

Stack Overflow用户
提问于 2014-04-24 16:58:16
回答 1查看 50关注 0票数 0
代码语言:javascript
运行
复制
#include <stdio.h>
#include <stdarg.h>
void f(int parameter, ...)
{
    va_list ap; 
    int j;
    va_start(ap, parameter); 
    for (j = parameter; j >= 0; j = va_arg(ap, int))
        printf("%d ", j); 
    va_end(ap);
    printf("\n");
}

int main()
{
    f(1, 2, 3, 4); 
    f(1, 2);
    f(1);
}

我写了这段代码,但输出是非常strange.Who可以告诉我的原因。输出:

代码语言:javascript
运行
复制
esekilvxen245 [10:54am] [/home/elqstux/useful] -> ./a.out
1 2 3 4 1748292352 1748370624 
1 2 1748295184 1745597392 
1 10 1748295184 1745597392
EN

回答 1

Stack Overflow用户

发布于 2014-04-24 17:01:06

循环的结束条件是j小于零,但是在调用中不会以负数结束参数列表。这意味着循环将继续,直到找到一个负数,负数可以在堆栈上的任何位置,远远超出您传递的参数。

叫它像这样。

代码语言:javascript
运行
复制
f(1, 2, 3, 4, -1);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23264295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档