0

こんにちは、配列に保存される関数に 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
    }

この例よりも複雑なプログラムなので、配列にする必要があります。

4

3 に答える 3

0

1 つの方法は、ヘッダー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のウィキペディアのエントリも、このアプローチのかなりまともなリソースです。また、このStackExchange ディスカッションには、より複雑な実装に関する非常に優れた情報が含まれています。

于 2013-05-30T20:35:16.800 に答える
0

使用する引数が定数式の場合は、次のようにすることができます。

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"
于 2013-05-30T19:30:25.043 に答える
0

値の配列と配列の長さを渡せないのはなぜですか? それはあなたが求めていることのほとんどを行うようです。例:

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;
}
于 2013-05-30T19:23:23.887 に答える