1

以前に宣言して割り当てずに、配列を C/C++ の関数に渡したいです。C# と同様に、次のことができます。

fun(new int[] {1, 1}); //this is a function call for void fun(int[]) type function

上記のコードの正確性についてはよくわかりません。しかし、私はC#でこのようなことをしました。

動的宣言 (その場での宣言) を使用して配列を関数に渡すにはどうすればよいですか??

次の方法で試してみました。しかし運がない

fun(int {1,1});
fun(int[] {1,1});
fun((int[]) {1,1});

できませんか..??

4

4 に答える 4

4

C99 以降では、次のようになります。

foo((int[]){2,4,6,8});

これとほぼ同じです:

int x[] = {2,4,6,8};
foo(x);

C99 より前では、これは不可能です。C++ もこの構文をサポートしていません。

于 2012-07-21T10:24:29.403 に答える
3

C++11 では、初期化リストを使用できます。

#include <initializer_list>
#include <iostream>

void fun(std::initializer_list<int> numbers)
{
    for (int x : numbers)
        std::cout << x << ' ';
    std::cout << '\n';
}

int main()
{
    fun( {2, 3, 5, 7, 11, 13, 17, 19} );
}
于 2012-07-21T11:28:38.580 に答える
2

これは、ANSI C99 および C11 では可能ですが、C89 では可能ではありません。

于 2012-07-21T10:29:53.720 に答える
1

可変引数リストの使用を提案できますか?

宣言構文は次のようになります。

void Function(int Count, ...) {
     va_list va;
     va_start(va, Count);
     for(int i = 0; i < Count; ++i) {
         int nextVar = va_arg(va, int);
         //Do some stuff with the array element
     }
     va_end(va);
}

この関数は次のように呼び出されます。

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

2、3、1、および5は「配列要素」です。

または、その関数内で配列を処理する必要がある場合は、newとdeleteを使用して、変数リストを適切な(動的)配列に簡単に移動できます。

va-function内:

 int *Array = new int[Count];
 for(int i = 0; i < Count; ++i) {
      Array[i] = va_arg(va, int);
 }
 //Do Stuff with Array
 delete[] Array;
于 2012-07-21T10:30:18.180 に答える