我知道数组类似于C中的指针。可以肯定地说,这意味着当我将一个数组,比如int array [3] = {1,2,3}传递给另一个更改传入数组的值为int array [3] = {3,2,1}也会改变原始数组?如果是这样,这是否意味着我基本上不必返回我传入的数组,因为我对传入的数组所做的任何值更改都会改变原始数组的值? (据我所知,实际上不可能直接使用函数返回数组。)
答案 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[])
{
}
但是将数组的大小和数组的基地址一起传递给函数总是好的,这有助于避免数组绑定错误。