gpt4 book ai didi

c++ - 指向引用赋值的指针

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:37 24 4
gpt4 key购买 nike

我对 C++ 中的赋值有点困惑:

Q1:为什么会这样:

int *z = &x;(1)

虽然这当然行不通:

*z = &x;(2)

Q2:同类型的函数题:

funct(int *z)

你称它为:

int x;
func(&x);

是不是表示*z=&x?我知道我在上述情况下传递了地址 (z=&x)。但是赋值两侧的两个术语应该完全相同吗?

最佳答案

假设 x 声明为 int

int x;

然后是你的第一行

int *z = &x;

表示将 z 声明为指向 int 的指针类型。使用指向 int x 的指针对其进行初始化。都好。它类型检查正常。 z 是一个指向 int 的指针,&x 也是。

但是现在

*z = &x;

失败,因为 z 是一个指向 int 的指针,所以 *z 是一个 int!您不能将指向 int 的指针 &x 分配给 int。那是类型不匹配。

现在在你的函数调用问题中

void func(int *z) {...}

你的电话

func(&x);

很好。它将指向 int 的指针 &x 按值传递给参数 z,它本身就是指向 int 的指针。在 func 中,您确实得到了 z = &x 的效果。按值传递参数非常类似于赋值。

附录

你会看到像 &x 这样的值被传递给用 int *z 这样的指针类型声明的参数的原因是它允许调用者的 x通过参数z来修改。换句话说:

void func(int *z) {
*z = *z + 1;
}

如果这样调用

int main() {
int x = 10;
func(&x);
cout << x << '\n';
}

将输出 11。将 &x 传递给 z 意味着 z == &x *z == x,甚至更强,*zx 现在是内存中完全相同的实体的别名!对 *z 所做的任何更改都会影响 x,反之亦然;这两个表达式引用相同的内存位置。

在图片中:

     +-------+                              +-------+
z | | | | *z
| +---+----------------------------->| |
&x | | | | x
+-------+ +-------+

关于c++ - 指向引用赋值的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19750596/

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