C ++ * vs []作为函数参数

时间:2012-05-25 20:20:46

标签: c++ arrays pointers parameters struct

有什么区别:

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

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

假设项目是:

struct item
{
    char* string;
}

指针指向第一个字符数组

list只是一个项目数组......

3 个答案:

答案 0 :(得分:8)

对于编译器,没有区别。

虽然看起来不一样。 []表示您希望将数组传递给函数,而*也可能只是一个简单的指针。

请注意,当作为参数传递时,数组会衰减为指针(如果您还不知道的话)。

答案 1 :(得分:3)

它们是相同的 - 完全是同义词。第二个是item list[],而不是item[]list

然而,当参数像数组一样使用[]时,习惯使用*,而像指针一样使用{{1}}。

答案 2 :(得分: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])都是等效的