在下面的程序中,将数组作为参数传递给修改其参数的某个函数后,数组x
的第一个元素的值打印为零。 int
变量y
不会发生同样的情况,另一个函数的修改在调用函数中未被注意到。因此,我希望数组在函数调用之前保留其值,就像y
一样。为什么在变量不是时更改了数组?
void func1 (int x[]){
x[0]=0;
}
void func2(int y){
y=0;
}
int main(){
int x[]={7}, y=8;
func1(x);
func2(y);
cout << x[0] << y;
return 0;
}
输出:
08
预期:
78
答案 0 :(得分:0)
参数int[]
与int*
完全相同,是{int}的指针。传递给函数的数组衰减到指向数组的第一个元素的指针,因此通过下标运算符取消引用它,并修改int pointee导致原始数据被修改。
答案 1 :(得分:0)
对于您的信息,我将值放在每行的评论中
void func1 (int x[]){
x[0]=0;//x here has same address as in main function so changes can be //directly apply to the original value of x array
//x[0]=7 was passed in this function is now modified by have a value x[0]=0
}
void func2(int y){
y=0;//but y is a different variable in this function it is not the same y in main function so if you change its value it does not mean that you are changing the value of y in main function so it does not give you the expected output
// it is due to local variable concept y in func2 is different and y in main is a different so all you have to do is to pass address of y variable so that if you want to change any thing is y will directly change its value in main function
}
int main(){
int x[]={7}, y=8;
func1(x);
func2(y);
cout << x[0] << y;
return 0;
}
答案 2 :(得分:0)
数组使用连续的内存位置来存储数据。
当您调用func1(int x[])
时,之前的值会随着函数给出的值而改变,并且位置保持不变,所以
在主要功能
x[0]=7
函数调用后
x[0]=0
这就是你的数组值发生变化的原因
对于变量,你没有返回任何为什么没有变化的变量。
所以08
是这种情况的正确输出