我有一个非常简单的程序:
int main() {
int a = 10;
int* b = &a;
*b = 100;
return 0;
}
我理解指针的作用是保存变量的地址。因此,在我的示例中,指针b
保存变量a
的地址。
这一切都很好。
我的问题在于解引用的工作方式。据我所知,如果我在b
之前添加一个cout
语句,就会发生解引用。
*b = 100
例如:
cout << *b << endl;
然后程序应该打印
10
,因为*b
将获得指针所持有地址中存储的值。
我的问题是,当我看到这一行时:
*b = 100;
这只是让我理解为“将100存储在地址b中存储的值”的字面翻译,这实际上不是发生的情况。实际发生的是100将被存储在指针所持有的地址中。我的问题是我不能理解为什么。
我知道
b = 100
也没有意义,因为你会尝试将值10存储在变量b的地址中,这将替换存储在b中的变量 a 的地址。也许是星号符号的选择,但对我来说它一直读作
10 = 100
,因为当b
是一个指针时看到*b
意味着“获取存储在b所持有的地址中的值”。可以有人解释C ++中的解引用以及为什么
* b = 100
实际上并不意味着10 = 100
吗?
a = 100;
会被理解为赋值操作,而不是把10
赋值为100
。 - 1201ProgramAlarmint x = 10; x = 100;
的含义。为什么这不是10 = 100
?一旦你理解了这一点,同样适用于*b = 100
。 - M.Mint* b = &a;
。这等同于int* b; b = &a;
(而不是int* b; *b = &a;
),这很令人困惑,因为在指针声明期间进行赋值看起来像是对解引用指针进行赋值,但实际上并不是这样。 - isrnick