【问题标题】:Passing few numbers as a one array argument to function将几个数字作为一个数组参数传递给函数
【发布时间】:2013-05-30 19:02:12
【问题描述】:

您好,我想从 on 到 10 个参数传递给一个将保存在数组中的函数。

function( 4, 3, 5); //calling function and passing arguments to it.

void function(int array[10])
{
    cout<<array[0];  // = 4
    cout<<array[1];  // = 3
    cout<<array[2];  // = 5
    cout<<array[3];  // = NULL or 0 or sth else
}

基本上,我希望有机会传递尽可能多的参数,不多也不少。

不可能是这样的。

    function( 4, 3, 5); //calling function and passing arguments to it.

    void function(int x1=NULL , int x2=NULL , int x3=NULL ,int x4=NULL , int x5=NULL)
    {
    for (int i=0 ; i<10;i++)
    {
        array[i] = x1;    // x2 , x3 and so on ...
    }

    cout<<array[0];  // = 4
    cout<<array[1];  // = 3
    cout<<array[2];  // = 5
    cout<<array[3];  // = NULL or 0 or sth else
    }

程序比这个例子复杂,所以我需要它是数组。

【问题讨论】:

  • 使用向量可以让程序不那么复杂
  • 我不确定我在这里看到了问题。
  • 那么你想传递变量参数并返回数组中的参数?
  • 我想像单个整数一样传递参数,但我想将它们保存到数组中。如果我将 x 、 a 、 b 传递给函数,它会将其保存到数组中,例如 array[0]=x 、 array[1]=b 、array[2]=a
  • 我不确定你的要求可以做到。就像嫌疑人说的那样, std::vector 可能是你最好的选择。不过我可能误解了你的问题,你能详细说明一下吗?

标签: c++ arrays function arguments


【解决方案1】:

一种方法是声明一个在header cstdarg 中定义的veridac 函数。

不能说我实际上将它们用于任何事情,但完成您似乎想要做的事情的基本方法看起来像:

#include "stdarg.h"

void myfunction(int argcnt, ...){
  va_list args;
  int myarray[argcnt];

  va_start(args, argcnt);
  for(int i=0;i<argcnt;i++){
    myarray[i] = va_arg(args,int);
  }
  va_end(ap);
  // At this point, myarray[] should hold all of the passed arguments
  // and be ready to do something useful with.
}

在此示例中,要处理的附加参数的数量在第一个参数中传递。所以调用:

myfunction(5,1,2,3,4,5);

会生成一个等效于 myarray[5]={1,2,3,4,5} 的局部变量

stdarg.h 的Wikipedia entry 也是这种方法的一个相当不错的资源。此外,StackExchange discussion 提供了一些关于更复杂实现的非常好的信息。

【讨论】:

    【解决方案2】:

    为什么不能只传入一个值数组和数组的长度?看起来这几乎可以满足您的要求。示例:

    int main{
      int myArray[3] = { 4, 3, 5 };
      function( myArray, 3 );
    }
    
    void function( int * argsArray, int argsArrayLength ){
      int i;
      for( i = 0; i < argsArrayLength; i++ )
        cout << argsArray[i] << endl;
    }
    

    【讨论】:

    • 是的,应该可以,谢谢 :) 这不是我的目标,但你的想法可以做到。
    • 那是一个C函数。将可变长度数组实现为指针和长度在 C++ 中非常不习惯,只能用作最后的性能优化。
    【解决方案3】:

    如果您使用的参数是常量表达式,您可以这样做:

    template <int... Entries>
    void function() {
        int array[sizeof...(Entries)] = {Entries...};
    
        for (int number : array) {
          std::cout << number << ' ';
        }
    }
    

    这就是你使用它的方式:

    function<4,3,6>(); // prints "4 3 6"
    

    【讨论】:

      猜你喜欢
      • 2012-05-25
      • 2015-09-28
      • 2017-08-07
      • 2014-12-08
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多