我只是在玩指针,我有一个问题。
我写了以下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)是假的?如果我没有将它指向一个值,代码就不会编译。
另外,你如何将条件测试翻译成英语?
答案 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。