C ++ if语句解释混乱

时间:2018-11-24 23:44:06

标签: c++ if-statement operator-keyword boolean-operations

我是C ++的新手,有时我很难理解复杂的if语句,谁能帮助我解释以下代码?提前致谢。 鉴于:

int vis[25], g[25][25], Ty[25][25];

for (int i = 1; i < 30; i++)
{ 
if(!vis[i] && g[x][i] == 1 && Ty[f][i] != n) {...}
}

Vis []是一个数组,仅被初始化,并且此刻没有任何赋值。 那么!vis [i]是什么意思? 它是指vis [i]!= 0还是vis [i] == 1或其他含义?

2 个答案:

答案 0 :(得分:1)

int vis[25], g[25][25], Ty[25][25];

声明3个数组。 “ vis”是大小为25的一维数组,“ g”是大小为25x25的2D数组,与“ Ty”相同。

    if(!vis[i] && g[x][i] == 1 && Ty[f][i] != n) {...}

在C ++中,如果值是0,则整数在布尔表达式中的值为“ false”,对于所有其他值,其值为“ true”。因此,在if语句中,当vis [i] == 0时,第一个表达式“!vis [i]”的计算结果为true。

当'g'中索引[x] [i]的值等于1时,第二个表达式将为true。

当“ Ty”中的索引[f] [i]上的值不等于某个变量“ n”时,第三条语句的计算结果为true,该变量可能是在程序中某个地方定义的,例如“ x”。 >

*注意-正如drescherjm在评论中指出的那样,for循环最多只能增加24,因为在任一方向上数组的大小均为25,因此访问0-24(含)范围之外的元素是未定义的行为。

答案 1 :(得分:0)

  • int只有false才是0。这意味着字符串为真。
  • 逻辑语句前面的!将其取反。

因此,如果检查:

  1. 位置vis上的数组i必须为0

    !vis[i] == !(vis[i] != 0) == vis[i] == 0

  2. gxi的数组值必须为一个

  3. 位置Tyf上的i数组不能等于n中的值