6

違いは何ですか:

void foo(item* list)
{
    cout << list[xxx].string;
}

void this(item list[])
{
    cout << list[xxx].string;
}

アイテムが次のとおりであると仮定します。

struct item
{
    char* string;
}

文字配列の最初のポインタを指す

list単なるアイテムの配列です...

4

3 に答える 3

9

コンパイラにとって、違いはありません。

読み方は違うけど。[]関数に配列を渡すことを示唆していますが*、単なるポインターを意味することもあります。

配列は、パラメーターとして渡されるとポインターに減衰することに注意してください (まだわかっていない場合)。

于 2012-05-25T20:22:17.160 に答える
3

それらは同じです - 完全に同義です。2 つ目はitem list[]ではありませんitem[]list

[]ただし、パラメーターが配列のように*使用される場合と、ポインターのように使用される場合に使用するのが通例です。

于 2012-05-25T20:21:59.947 に答える
1

ご参考までに:

void foo(int (&a)[5]) // only arrays of 5 int's are allowed
{
}

int main()
{
  int arr[5];
  foo(arr);   // OK

  int arr6[6];
  foo(arr6); // compile error
}

しかしfoo(int* arr)foo(int arr[])foo(int arr[100])はすべて同等です

于 2012-05-25T20:35:35.150 に答える