更改指针保存地址的变量的值

我有一个非常简单的程序:

int main() {
    int a = 10;
    int* b = &a;
    *b = 100;
    return 0;
}

我了解指针的作用,它保存变量的地址。所以在我的例子中,指针b保存了变量的地址a

这一切都很好。

我的问题是解引用是如何工作的。根据我的理解,如果我要cout在之前添加一个声明

*b = 100
*b = 100

如:

cout << *b << endl;

然后程序应该打印10,因为*b它将获取存储在指针所持有的地址中的值。

我的问题是,当我看到这一行时:

*b = 100;

这对我来说只是“在存储在地址中的值中存储 100 b”,这将字面转换为 10 = 100。现在显然这不是实际发生的情况,发生的情况是 100 将存储在地址中指针正在握住。我的问题是我不明白为什么。

我知道这b = 100也没有意义,因为您会尝试将值 10 存储在变量的地址中b,这将替换a存储在b.

也许这是星号符号的选择,但对我来说,这只是连续读取为10 = 100,因为看到*b何时b是指向我的指针意味着“获取存储在b所持有的地址中的值”。

有人可以解释 C++ 中的取消引用,为什么*b = 100实际上并不意味着10 = 100

回答

这个:

可以读作“在b指向的位置存储值 100 ”。并且因为b包含 的地址a,所以上面的内容实际上等同于:

a = 100;

正式地说,解引用运算符的结果*是一个lvalue,这基本上意味着它是一个可以赋值的对象,就像变量名本身可以赋值一样。

  • @Vyres Yes, that's another way of putting it.

以上是更改指针保存地址的变量的值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>