12

我已经看到如果函数参数为“int arr[]”或“int * arr”,数组值会发生变化。区别在哪里?

整数数组[]:

void myFunction(int arr[], int size) {

    for (int i = 0; i < size; ++i)
        arr[i] = 1;
}

整数 * 数组:

void myFunction(int * arr, int size) {

    for (int i = 0; i < size; ++i)
        arr[i] = 1;
}

这两个函数都会更改数组值。

int main(){

     int array[3];

     array[0] = 0;
     array[1] = 0;
     array[2] = 0;

     myFunction(array, 3);

     return 0;

 }
4

4 回答 4

8

没有区别。两种函数类型(调整后)都是“带有指向intint返回的指针的函数void”。这只是 C++ 的一个语法怪癖:[]非引用类型的函数参数的最外层与*.

于 2013-05-25T09:27:58.107 回答
0

表达同一事物的不同方式。您只是通过指针将数组传递给函数。

于 2013-05-25T09:27:03.723 回答
-2

当您将数组传递给函数时,它会通过指针隐式传递它。因为如果数组中有很多元素通过值复制传递,那将是一个巨大的开销。即使它看起来不同但相同。

您不能同时使用这两个功能。如果你做它的编译时错误

 error: redefinition of 'void myFunction(int*, int)'
 it is already defined.
于 2013-05-25T09:27:06.330 回答
-3

没有区别。事实上,数组的声明返回了一个指针。只是,当您在声明中指定变量是一个数组(即使用 [])时,没有必要指定它将是一个指针,因为这是隐式生成的。但是当你没有指定这个时,你必须将它声明为一个指针,如果你去影响它一个表变量,或者“new []”的结果。当在设计时不知道数组大小时,表指针的使用仅对动态分配感兴趣。

于 2015-02-09T09:12:27.337 回答