C编程返回(!int)什么时候返回int值?

时间:2015-07-02 13:44:45

标签: c

int isEmptyArray (struct arrayBagStack * b) {
  return(!b->count);
}

我将此代码段显示为正确答案。我不理解在期望Int值时返回(!)Not Int值的概念。有人可以解释为什么这会起作用,预期的行为是什么?

countstruct arrayBagStack的int成员变量。

5 个答案:

答案 0 :(得分:9)

这里发生的类型没有变化。

not运算符(!)只计算另一个整数值,然后返回。

在这种情况下,它被用于将计数转换为真/假值,以回答数组是否为空的问题。如果b->count为0,!01,则表示"为真"。如果它是任何其他值,!会将其转换为0,即" false"。

在我看来,这样的代码无法最清晰;它应该只是:

return b->count != 0;

count的所有值生成完全相同的值,但更清晰。

答案 1 :(得分:3)

如果count 0返回1,则返回值扮演布尔角色,否则返回0

答案 2 :(得分:3)

  • 在C中, 0被视为布尔 false
  • 任何其他非零值为 boolean true
  • 默认情况下,true表示1

因此当您return(!b->count)相当于b->count ! = 0时,会返回truefalse。但由于return类型为int,如果b->count等于0,则isEmptyArray将返回1,否则为0

答案 3 :(得分:2)

因为你要回来了。

isEmptyArray表示

  • 返回“true”表示数组为空
  • 回归“假”说 数组不是

所以如果b - > count为NULL,那么你想要为空返回true,所以你将它反转

如果b - > count不是NULL你想为非空返回false,所以你反过来

如果你想删除!,那么将函数重命名为isNotEmptyArray以遵循逻辑

答案 4 :(得分:2)

并不是说它会将数据类型从int更改为!int

!将处理b->count的值。因此,如果为0,则!b->count将生成1,否则为0