首页 > 解决方案 > 将 &variable 传递给函数

问题描述

我对此代码的第 2 行和第 9 行有疑问。
我已经在代码块上运行了这段代码,结果发现它在第 9 行的末尾trip(&y)运行并y=21生成。这不是我所期望的。

我以为&y会返回地址(如十六进制数)并将其传递给trip. 然后trip将地址的奇怪(十六进制)数字增加三倍,并可能更改 的地址int y,或产生错误。

我的逻辑的哪一部分有问题?

我的逻辑是:

  1. &y返回变量的地址(十六进制)。
  2. trip (int* x)接受数字(在这种情况下为地址)并将其增加三倍。
  3. 因此,没有对 的实际值进行任何处理y,即7

期中1

编辑:答案是 105。

标签: c++

解决方案


y对函数的地址是正确的trip(int*)

您的错误是该函数trip(int*)取消引用地址以访问它指向的值。

假设y值为 7 并存储在地址 0x0014(为方便起见而简化)。该函数trip(int*)获取地址 0x0014 并使用它来获取 7 的值y。现在它将这个值增加三倍并将结果存储在地址指向的位置。y因此用新值 21覆盖值 7 。

这种地址的取消引用是由x函数体中 前面的星号 (*) 完成的trip(int*)

澄清。地址不一定是十六进制值。十六进制只是显示数字的一种方式。地址只是内存中某个位置的数字。在这种情况下,0x0014 与十进制的 20 相同。含义y存储在地址 20(十进制)。

请记住,指针很少是做某事的正确方法。就像在这种情况下使用函数一样quin(int&)。用指针解决的问题,在trip(int*)中解决得更干净quin(int&)。参考文献更干净、更安全。

该函数trip(int*)不检查给定地址无效的情况(给定地址是NULL/ nullptr)。quin(int&)甚至不必检查这一点,因为引用不能NULL在 C++ 中。

如果必须使用指针,请考虑使用 和 之类的智能std::unique_ptr<T>指针std::shared_ptr<T>


推荐阅读