C++ 路过及;函数的变量

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

我对代码第2行和第9行有疑问。
我在代码块上运行了这段代码,结果是
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
    。仔细阅读那个
    *
    操作符。