布尔表达式中的整数和指针
所有整数或指针都可以在被解释为真值的表达式中使用。
int main(int argc, char* argv[]) {
if (argc % 4) {
puts("arguments number is not divisible by 4");
} else {
puts("argument number is divisible by 4");
}
...
表达 argc % 4
被评估并导致 0
,1
,2
或 3
中的一个值。第一个,0
是唯一的假值并将执行带入 else
部分。所有其他值都是真实的并进入 if
部分。
double* A = malloc(n*sizeof *A);
if (!A) {
perror("allocation problems");
exit(EXIT_FAILURE);
}
这里评估指针 A
,如果它是空指针,则检测到错误并退出程序。
很多人喜欢用 A == NULL
来写一些东西,但是如果你把这种指针比较作为其他复杂表达的一部分,事情很快就会难以阅读。
char const* s = ....; /* some pointer that we receive */
if (s != NULL && s[0] != '\0' && isalpha(s[0])) {
printf("this starts well, %c is alphabetic\n", s[0]);
}
要进行检查,你必须扫描表达式中的复杂代码并确保运算符首选项。
char const* s = ....; /* some pointer that we receive */
if (s && s[0] && isalpha(s[0])) {
printf("this starts well, %c is alphabetic\n", s[0]);
}
相对容易捕获:如果指针有效,我们检查第一个字符是否为非零,然后检查它是否是一个字母。