我已经看到,如果函数参数是“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;
}
答案 0 :(得分:5)
没有区别。两种函数类型(调整后)都是“指向int
和int
的函数,返回void
。”这只是C ++的一个语法怪癖:非引用类型的函数参数中最外层的[]
与*
同义。
答案 1 :(得分:0)
表达同一事物的不同方式。您只是通过指针将数组传递给函数。
答案 2 :(得分:-2)
当您将数组传递给函数时,它会通过指针隐式传递它。因为如果数组中的许多元素通过值复制传递,那么这是一个巨大的开销。即使它看起来不同也是如此。
你不能同时使用这两个功能。如果你执行编译时错误
error: redefinition of 'void myFunction(int*, int)'
it is already defined.
答案 3 :(得分:-3)
没有区别。事实上,数组的声明返回allawys指针。只有当你在声明中指定变量是一个数组(即带有[])时,没有必要指定它将是一个指针,因为这是隐式的。但是当你没有指定它时,你必须将它声明为指针,如果你影响它的表变量,或者结果为&#34; new []&#34;。当在设计时不知道数组大小时,使用表指针只对动态分配感兴趣。