C++ 路过及;函数的变量
我对代码第2行和第9行有疑问。C++ 路过及;函数的变量,c++,C++,我对代码第2行和第9行有疑问。 我在代码块上运行了这段代码,结果是trip(&y)在第9行末尾运行并使y=21。这不是我所期望的 我以为&y会返回地址(如十六进制数)并将其传递给trip。然后trip将地址的奇怪(十六进制)数增加三倍,可能会更改int y的地址,或者产生错误 我的逻辑哪一部分有错 我的逻辑是: &y返回变量的地址(十六进制) trip(int*x)接收数字(本例中为地址)并将其三倍 因此,没有对y的实际值进行任何处理,即7 编辑:答案是105。关于函数trip(int*)的y
我在代码块上运行了这段代码,结果是
trip(&y)
在第9行末尾运行并使y=21
。这不是我所期望的
我以为&y
会返回地址(如十六进制数)并将其传递给trip
。然后trip
将地址的奇怪(十六进制)数增加三倍,可能会更改int y
的地址,或者产生错误
我的逻辑哪一部分有错
我的逻辑是:
&y
返回变量的地址(十六进制)trip(int*x)
接收数字(本例中为地址)并将其三倍李>
y
的实际值进行任何处理,即7
编辑:答案是105。关于函数
trip(int*)
的y
地址,您是对的
您的错误是函数trip(int*)
取消对地址的引用以访问它所指向的值
假设y
的值为7,并存储在地址0x0014(为方便起见简化)。
函数trip(int*)
获取地址0x0014并使用它获取y
的值7。
现在,它将该值增加三倍,并将结果存储在地址指向的位置。因此,用新值21覆盖y
的值7
地址的解引用由函数行程(int*)
正文中x
正前方的星号(*)完成
澄清。地址不一定是十六进制值。十六进制只是显示数字的一种方式。地址只是指向内存中某个位置的数字。在这种情况下,0x0014与十进制中的20相同。意思是y
存储在地址20(十进制)
请记住,指针很少是做某事的正确方式。与本例中的函数quin(int&)
类似。在trip(int*)
中使用指针解决的问题在quin(int&)
中得到了更清晰的解决。参考资料更干净、更安全
函数trip(int*)
不检查给定的地址是否无效(给定的地址为NULL
/nullptr
)<代码> quin(int &)甚至不必检查这个,因为引用不能在C++中<代码> null <代码>。
如果您必须使用指针,请考虑使用智能指针,如“代码> STD::UnQuyPPTR <代码>和<代码> STD::SyrdYPPTR .< /P>答案是105个副本的副本在C上,但是这里所问的问题(指针相关)在那里被回答。请将附加信息输入到问题中,而不是将其隐藏在注释中。
&y
是y
yes的地址,它被传递到函数中。但是,您忽略了使用函数*x
而不是纯x
。仔细阅读那个*
操作符。