将数组传递给函数时,如果我更改该函数中的数组值,原始数组的值是否会更改?

时间:2015-02-18 06:31:48

标签: c arrays

我知道数组类似于C中的指针。可以肯定地说,这意味着当我将一个数组,比如int array [3] = {1,2,3}传递给另一个更改传入数组的值为int array [3] = {3,2,1}也会改变原始数组?如果是这样,这是否意味着我基本上不必返回我传入的数组,因为我对传入的数组所做的任何值更改都会改变原始数组的值? (据我所知,实际上不可能直接使用函数返回数组。)

2 个答案:

答案 0 :(得分:3)

无法将数组传递给函数。当你这样写:

void myFunc(int ar[]) {
    // ar *looks like* an array?
}

int main() {
    int array[3] = {1,2,3};
    myFunc(array);
}

编译器会将其翻译为:

void myFunc(int *ar) {
    // nope, it's actually a pointer...
}

int main() {
    int array[3] = {1,2,3};
    myFunc(&array[0]); // ... to the first element
}

我建议不要使用void myFunc(int ar[])语法,因为它只会引起混淆。 (写array而不是&array[0]是可以接受的,但这只是因为它更短。)

关于你的问题:既然你实际上是在向数组传递指针,那么是的,修改指针指向的数组将修改原始数组(因为它们是相同的数组)。

答案 1 :(得分:0)

int array[3] = {1,2,3};
myFunc(array);// you are actually passing the base address of the array to myFunc.

myFunc()的函数声明

void myFunc(int arr[])
{
}

但是将数组的大小和数组的基地址一起传递给函数总是好的,这有助于避免数组绑定错误。