函数参数中int * array和int array []之间的区别

时间:2013-05-25 09:23:49

标签: c++ arrays pointers parameter-passing

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

int array []:

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

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

int * array:

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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

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

答案 2 :(得分:-2)

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

你不能同时使用这两个功能。如果你执行编译时错误

 error: redefinition of 'void myFunction(int*, int)'
 it is already defined.

答案 3 :(得分:-3)

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