gpt4 book ai didi

C++ 如何处理函数中指针和引用的变化?

转载 作者:行者123 更新时间:2023-11-28 05:23:46 25 4
gpt4 key购买 nike

void parameterMystery3(int* a, int& b, int* c) {
*a += *c;
(*c)++;
b--;
cout << b << " " << *a << " " << *c << end1;
}

int main() {
int w = -4;
int x = 10;
int y = 9;
int z = 13;

parameterMystery3(&x, x, &w);
}

如果参数 2(在 main() 的末尾)将 x 作为普通变量(不是指针或引用)传递,它是否仅引用 parameterMystery3 中的 x?如果它们被转换为带有 int* a 和 int* b 的指针,还是在主要问题的末尾添加 &s 还是我想错了?

最佳答案

我个人觉得 C++ 引用符号有点困惑。

参数声明中的 & 表示参数通过引用传递。您将 x 作为参数传递。如果您没有将参数声明为引用,则会传递 x 值的拷贝。当您将其声明为引用时,将传递对 x 的引用。这意味着,如果您更改 b 值,x 值也会更改。

现在,如果您使用指针类型声明参数,则必须提供声明类型的指针作为参数。没有完成转换。将 int 变量作为参数传递是编译时错误。您必须传递一个 int* 变量或指向该变量的指针。

您可以使用 & 获得指向变量的指针。令人困惑的是,最后一个 & 与参数 b 中的 & 的含义不同。虽然 int &b 表示 b 是对 int 的引用(参数通过引用传递),但您作为参数提供的变量之前的 & 表示“指向”变量的指针。

因此,如果 y 是一个 int 变量,&y 是一个指向 y 的 int *。

关于C++ 如何处理函数中指针和引用的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40955058/

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