When is (*b) false?
When is (*b) false?
我只是在玩指针,我有一个问题。
我写了以下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。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 伪造事实↔false
- QueryWorkingSet总是返回false
- Why is UINT32_MAX + 1 = 0?
- C++错误:"error: int aaa::bbb is protected within this context"
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 如何区分地图中的 0 和 false?
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- Is !NaN not a NaN?
- 模板参数列表中的 false 在模板初始化期间计算为什么?
- Arduino-C++ bool 不会从 false 变为 true
- Directx 11 - CompileFromFile() is not compiling
- Centos7 g++ "to_string is not in a member of std"
- 当返回类型声明为 ListNode 时,我们是否可以返回 false<T>*
- WaitForMultipleObjects when bwaitall is false
- 使用代码调整删除"comparison is always false"警告
- gcc, compiling, and NO_GLIBC is false
- (false - NOT (0)) is equal to 1?
- When is (*b) false?
- 修复警告"comparison is always false due to limited range of data type [-Wtype-limits]"