C++ C++;指针值更改
你好,我有这样的简单代码C++ C++;指针值更改,c++,linux,pointers,C++,Linux,Pointers,你好,我有这样的简单代码 void func(int &x, int y, int* z){ int a = 3; int b = 1; cout << *z << endl; x = *z + b; cout << *z << endl; y = *z + x; z = &a; cout << "func: x = " << x <&
void func(int &x, int y, int* z){
int a = 3;
int b = 1;
cout << *z << endl;
x = *z + b;
cout << *z << endl;
y = *z + x;
z = &a;
cout << "func: x = " << x << endl;
cout << "func: y = " << y << endl;
cout << "func: *z = " << *z << endl;
cout << "func: a = " << a << endl;
cout << "func: b = " << b << endl;
return;
}
int main(){
int a = 2;
int b = 4;
func(b, a, &b);
cout << "main: a = " << a << endl;
cout << "main: b = " << b << endl;
return 0;
}
所以我的问题是,为什么*z的值在x=*z+b
之后会发生变化,因为我自己无法理解它
提前感谢
x
主要是指b
(不要与func中的b
混淆,后者是单独的)z
是指向main中b
的指针。引用基本上是指针,但是没有*
或&
语法,您不能让它们指向其他东西(对于引用,没有与z=&a
等价的东西)
该行:
x = *z + b;
基本上是这样做的:
b_in_main = b_in_main + b_in_func;
因为
x
和*z
都引用了同一个变量。x
是对main中b
的引用(不要与func中的b
混淆,后者是分开的)z
是指向main中b
的指针。引用基本上是指针,但是没有*
或&
语法,您不能让它们指向其他东西(对于引用,没有与z=&a
等价的东西)
该行:
x = *z + b;
基本上是这样做的:
b_in_main = b_in_main + b_in_func;
因为
x
和*z
都引用同一个变量。因为您将其更改为指向局部变量a
z = &a;
因此,当您取消引用它时,它会给出局部变量a的值,即3,因为您将其更改为指向局部变量a
z = &a;
因此,当您取消引用它时,它会给您局部变量a的值,当您使用&在您给方法提供参数之前,它不会被复制,而是链接到它 以便:
在给方法指定参数之前使用&时,该参数不会被复制,而是链接到它 以便:
-这里,x是一个int引用,指向调用方端变量b
-z是一个int指针,包含同一变量b的地址
因此,此时,x和z指的是同一事物。
因此,将新值指定给x意味着将该值指定给b。由于z指向b,因此读取z后会得到指定给x的值 您可以通过写入并比较x的地址和z的值来确保这一点:
cout << "(1) z is: " << z << " - &x is: " &x
// should be the same
z = &a;
cout << "(2) z is: " << z << " - &x is: " &x
// should be the different
cout
更改z的值,因为:
-这里,x是一个int引用,指向调用方端变量b
-z是一个int指针,包含同一变量b的地址
因此,此时,x和z指的是同一事物。
因此,将新值指定给x意味着将该值指定给b。由于z指向b,因此读取z后会得到指定给x的值
您可以通过写入并比较x的地址和z的值来确保这一点:
cout << "(1) z is: " << z << " - &x is: " &x
// should be the same
z = &a;
cout << "(2) z is: " << z << " - &x is: " &x
// should be the different
不能谢谢:)现在我明白了:)谢谢:)现在我明白了:)我问了其他的事。谢谢你的回答,但这不是我的问题:)你没问为什么在这行x=*z+b之后*z的值会改变吗?是的,但是你的答案在下面两行,在x=*z+b
时没有执行。我的意思是两个cout,在第一个*z==4
中,在x=*z+b
*z==5
之后。。以上答案是正确的。我问了另外一件事。谢谢你的回答,但这不是我的问题:)你没问为什么在这行x=*z+b之后*z的值会改变吗?是的,但是你的答案在下面两行,在x=*z+b
时没有执行。我的意思是两个cout,在第一个*z==4
中,在x=*z+b
*z==5
之后。。以上答案是正确的