更改指针保存地址的变量的值
我有一个非常简单的程序:
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.