我只是在玩指针,我有一个问题。
我写了以下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)何时为假?如果我不把它指向一个值,代码就不会编译。
另外,你如何将条件测试翻译成英语?
在这段代码中,只有当a
为零时,它才会为false。事实并非如此,所以这个条件永远不会是错误的。
CCD_ 2解引用指针CCD_。由于b
指向a
,因此*b == a
总是正确的(除非将b
更改为指向其他位置)。
while (*b)
的英文翻译是"只要对象b
指向的值为true,就执行这个循环的主体。"当int
的值为非零时,它就是true。
语句中的条件
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.pool]
1算术、无范围枚举、指针或指针的prvalueto成员类型可以转换为布尔类型的prvalue。零值、空指针值或空成员指针值被转换虚假;任何其他值都转换为true。