什么时候(* b)是假的?

时间:2014-11-06 17:37:53

标签: c++

我只是在玩指针,我有一个问题。

我写了以下while循环:

#include <iostream>
using namespace std;

int main() {

    int a = 10;
    int *b = &a;

    while(*b){ cout << "true"; break; }

    cout << endl;
    cout << b;

    return 0;
}

条件是什么时候,(* b)是假的?如果我没有将它指向一个值,代码就不会编译。

另外,你如何将条件测试翻译成英语?

2 个答案:

答案 0 :(得分:7)

在此代码中,如果a为零,则仅为假。不是,所以情况永远不会是假的。

*b取消引用指针b并将其作为指向值进行求值。由于b指向a*b == a总是如此(除非您将b更改为指向其他位置。)

while (*b)的英文翻译是“执行此循环的主体,只要对象b指向评估为真。”当{0}值为非零时,int为真。

答案 1 :(得分:0)

声明中的条件

while(*b){ cout << "true"; break; }

可以用以下方式翻译成英文

while(*b not_eq 0 ){ cout << "true"; break; }

其中not_eq对应英文单词not equal。:)如果你有一个现代的编译器,那么这个带not_eq的语句将被编译。

考虑到在此特定情况下*b等于10,因为b指向a

你可以用以下方式编写循环

while ( *b not_eq 0 ){ cout << "true"; b = 0; }

没有break语句。效果是一样的。

根据C ++标准

4.12布尔转换[conv.bool]

  

1算术,无范围枚举,指针或指针的prvalue   成员类型可以转换为bool类型的prvalue。零   转换value,null指针值或null成员指针值   为假;任何其他值都转换为true。