gpt4 book ai didi

c++ - 将变量传递给函数

转载 作者:行者123 更新时间:2023-11-30 03:13:59 25 4
gpt4 key购买 nike

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

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

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

我的逻辑是:

  1. &y 返回变量的地址(十六进制)。
  2. trip (int* x) 获取数字(本例中为地址)并将其乘以三倍。
  3. 因此,y 的实际值为 7 未做任何处理。

midterm1

编辑:答案是 105。

最佳答案

关于 y 的地址你是对的赋予函数 trip(int*) .

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

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

地址的取消引用是由 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> .

关于c++ - 将变量传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58280740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com