所以我现在正在学习C ++,而我正试图用指针来解决问题。任何人都可以解释以下情况:
bool testFalse = false; //testFalse = false
bool *thisIsFalse = &testFalse; //value of address of thisIsFalse shows that the address contains false
bool shouldBeFalse = &thisIsFalse; //shouldBeFalse = true is what I get here
shouldBeFalse(顾名思义)应该是假的,但肯定不会那样。有人可以解释为什么它最终成为真实,如何使它成为正确的价值?谢谢!
答案 0 :(得分:7)
你正在使用&你应该在哪里使用*:
bool shouldBeFalse = *thisIsFalse
答案 1 :(得分:2)
目前还不完全清楚你要做什么,但我的猜测是你实际上想要取消引用指针(即检索指向的值)。为此,您需要操作符*
,而不是&
:
bool shouldBeFalse = *thisIsFalse;
您的代码所做的是取代变量thisIsFalse
的地址,生成指向指针的指针。现在在C ++中,指针如果为NULL则被视为“false”,否则被视为“true”;如果你传递一个指向bool
的指针,编译器会隐式地将指针转换为bool
。由于那里有一个非NULL指针,它已转换为true
。
答案 2 :(得分:1)
thisIsFalse
是变量,&thisIsFalse
是该变量的地址。由于地址不为0,因此将其转换为bool
为true。我不确定你用这条线去做什么..也许你的意思是这个?
bool shouldBeFalse = *thisIsFalse;
答案 3 :(得分:1)
您在此处所做的是将<{em> {/ 1>}变量的地址分配给thisIsFalse
。您打算做的是取消引用 shouldBeFalse
。具体来说,由于thisIsFalse
变量存储在非空(非零)内存位置,因此它的计算结果为thisIsFalse
。
true
答案 4 :(得分:0)
为了讨论布尔值,您应该取消引用指针(*),而不是取其地址(&amp;)。
bool shouldBeFalse = *thisIsFalse;
答案 5 :(得分:0)
testFalse
是一个布尔值,其值为false
。
thisIsFalse
是一个指向布尔值的指针,并被赋予一个等于testFalse
地址的值(我假设您打算键入&testFalse
而不是&test
)。这意味着在使用*thisIsFalse
时,它将指向testFalse
存储的值,在本例中为false
。如果您将testFalse
的值更改为true
,则*thisIsFalse
将为true
。
shouldBeFalse
是布尔值,但您已为其指定了等于thisIsFalse
地址的值。此地址是非零值,在C ++中,任何非零值都被视为true
,因此shouldBeFalse
现在为true
。
相反,您应该更改最后一行,以便将shouldBeFalse
的解除引用值分配给thisIsFalse
,而不是地址。
bool shouldBeFalse = *thisIsFalse;
答案 6 :(得分:0)
将符号翻译成单词会很有帮助,这样你就可以理解你所写的内容了。
当在等号右侧时,mentaly将'*'
替换为“指向的值”,将'&'
替换为“地址”。
如果您这样做了,您将按照以下方式阅读您的代码:
#testFalse is False;
#thisIsFalse is **the address of** testFalse;
#shouldBeFalse is **the address of** thisIsFalse;
但你想要的是:
#shouldBeFalse is **the value pointed to by** thisIsFalse;
从那里很容易记住'*'
和'&'
的角色,因此您可以将其转换回:
bool shouldBeFalse = *thisIsFalse;