标签: variadic-functions

形式参数类型声明中double ...和double []之间的区别

我有疑问:这两个声明有什么区别?

 public static void printMax(double... numbers) { ... }

 public static void printmax(double numbers[])  { ... }
Run Code Online (Sandbox Code Playgroud)

double... numbers一样的double numbers[]吗?

java arrays parameter-passing variadic-functions

2
推荐指数
1
解决办法
2757
查看次数

制作我自己的printf功能?

我想知道我怎么能做到这一点.我对N个论点部分感到困惑:

printf("Hello, I'm %i years old and my mom is %i .",me.age(),mom.age());
Run Code Online (Sandbox Code Playgroud)

我想创建一个函数,它将采用这样的格式化字符串并返回一个std字符串.

N个参数部分是如何完成的?

c variadic-functions

2
推荐指数
1
解决办法
1112
查看次数

va_args解析中的分段错误

为什么下面的代码给出了EXC_BAD_ACCESS, could not access memory

int combine_strings(char **outputStr,...)
{
    va_list ap;
    char *s, *out=0;
    int len=0;

    va_start(ap,outputStr);
    while(s=va_arg(ap,char *))
    {
      len+=strlen(s);
    }
    va_end(ap);


    if(!(out=malloc(len+1)))
        exit(1);

    *outputStr=out;

    va_start(ap,outputStr);
    while(s=va_arg(ap,char *))
    {
      len=strlen(s);
      memcpy(out,s,len);
      out+=len;
    }
    va_end(ap);

    *out=0;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c malloc variadic-functions segmentation-fault

2
推荐指数
1
解决办法
2260
查看次数

C++标准参数:对va_start的多次调用

我注意到va_start在两个函数中连续调用时出现了一些问题.一个基本的例子如下:

std::string format(std::string fmt, ...)
{
   char buf[2000];
   va_list aq;
   va_start(aq, fmt);
   vsprintf(buf, fmt.c_str(), aq);
   va_end(aq);
   return std::string(buf);
}
void error(std::string fmt, ...)
{
   va_list ap;
   va_start(ap, fmt);
   printf("%s", format(fmt, ap).c_str());
   va_end(ap); 
   exit(1);
}

int main()
{
   int x = 10;
   printf("%s", format("Test %d\n", x).c_str());
   error("Test %d\n", x);
}
Run Code Online (Sandbox Code Playgroud)

产生

Test 10
Test -1078340156
Run Code Online (Sandbox Code Playgroud)

似乎在使用该error函数时,参数已损坏.

传递va_list到另一个函数的正确方法是什么?

c++ variadic-functions

2
推荐指数
1
解决办法
3434
查看次数

printf的原型和实现

我开始想知道printf函数是如何声明的,它总是接收一个字符串作为第一个参数(好吧,const char*),然后其余参数可以是各种类型,它们的数量可变并且以不同的顺序给出。

这是否意味着printf针对每种可能性都对函数进行了声明和覆盖?这对我来说意义不大,所以它真的像这样工作还是与众不同?

另外,该功能如何实现?如果太复杂了,我只想知道它在内部一般是如何工作的。

c variadic-functions

2
推荐指数
1
解决办法
1万
查看次数

"va_start"的第二个参数

对于以下代码:

void fun(char *msg, int n, int m, ...) {
    va_list ptr;
    va_start(ptr, m);  // Question regarding this line

    printf("%d ", va_arg(ptr, int));
}
Run Code Online (Sandbox Code Playgroud)

该函数调用如下:

fun("Hello", 3, 54, 1, 7);
Run Code Online (Sandbox Code Playgroud)

我的问题是关于上面评论的那一行.我尝试了该行的以下三个版本:

va_start(ptr, msg);
va_start(ptr, n);
va_start(ptr, m);
Run Code Online (Sandbox Code Playgroud)

在所有三种情况下,我得到"1"作为输出.根据我的阅读,第二个参数va_start应该是函数参数列表中的最后一个参数fun(),即va_start(ptr, m);应该是正确的调用.那么为什么我在这三种情况下得到相同的输出.

[我在Ideone上运行程序,如果这有任何后果.]

c c++ variadic-functions

2
推荐指数
1
解决办法
700
查看次数

这个函数返回什么

function f(...)
  return ...
end
Run Code Online (Sandbox Code Playgroud)

我称之为:

f()
Run Code Online (Sandbox Code Playgroud)

a = f()
print(a) -- echoes 'nil', same as print(nil)
Run Code Online (Sandbox Code Playgroud)

print(f()) -- echoes newline, same as print(), that is, no args
t = {f()} -- same as t = {}
Run Code Online (Sandbox Code Playgroud)

那么,f()返回什么?

更新:不知道函数可以返回'void',同时发现这个http://lua-users.org/lists/lua-l/2011-09/msg00289.html.

lua variadic-functions

2
推荐指数
1
解决办法
1148
查看次数

具有未知数量的变量的函数

我看到有人创建了一个具有未知数量参数的函数:

public static double calculator(double ... value){
    double result=0d;

    for(int i=0;i<?;i++){
        result+=value;
    }

    return result
}
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试创建一个for循环,该循环将以输入的参数数量运行次数,因此:

double calc = calculator(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

这将使for循环运行5次.

java loops variadic-functions

2
推荐指数
1
解决办法
627
查看次数

Variadic-templates类构造函数

我编写了以下代码来创建一个带有构造函数的类,该构造函数将变量数(N)的整数加上两个double作为参数,如下所示:

#include <cstdio>
#include <cstdlib>

#include <vector>
#include <array>

template <std::size_t N>
class point_t {

public:

  std::vector<int> values;

  template<typename ... Args>
  point_t(Args ... args, double distance, double value) {

    std::array<int , N> list = {(args)...};

    for(std::size_t i=0; i<N; ++i) values[i] = list[i];

  }

};


int main(int argc, char *argv[]) {

  point_t<4> test(1, 2, 3, 4, 3.0, 6.7);

  return 0;

}
Run Code Online (Sandbox Code Playgroud)

编译器返回以下错误:

没有用于初始化'point_t <4>'的匹配构造函数
候选构造函数不可行:需要2个参数,但是提供了6个参数

我错过了什么?

c++ variadic variadic-functions variadic-templates c++11

2
推荐指数
1
解决办法
665
查看次数

为什么Java varags method(int [] ... x)接受此“ new int [1] [1]”二维数组类型作为参数?

我有这样的方法。

void method(int[] ...x){}
Run Code Online (Sandbox Code Playgroud)

并且我可以使用method(new int[]{1,2,3,4}); 它来调用方法。但是编译器也会编译此2d数组类型。

method(new int[][]{new int[]{1,2,3},new int[]{4,5,6}});
Run Code Online (Sandbox Code Playgroud)

我想知道原因。 方法具有一维数组类型引用。但是编译器接受二维数组类型。

java arrays compilation variadic-functions

2
推荐指数
1
解决办法
62
查看次数