C ++指针问题

时间:2009-07-16 00:21:30

标签: c++ pointers

所以我现在正在学习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(顾名思义)应该是假的,但肯定不会那样。有人可以解释为什么它最终成为真实,如何使它成为正确的价值?谢谢!

7 个答案:

答案 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;