如果没有条件?

时间:2010-11-26 15:28:26

标签: c++ multidimensional-array if-statement

我今天刚刚发现这个“C ++”,我无法理解它:

  

if(array[i][j]) {--i;--j;}

任何人都可以向我解释这是如何工作的?我只是不明白。这是什么情况?看起来每次都是如此,但是当我摆脱了IF(所以只剩下这个{--i;--j;}。)它的效果不一样。

我对C ++很陌生,所以请轻松解释一下! :)

谢谢!

6 个答案:

答案 0 :(得分:20)

在C ++中,非零值可用于表示条件语句中的“成功”。

这是来自C99,第6.8.4.1节:

  

if声明

     

2在两种形式中,如果表达式将une等于0,则执行第一个子语句。

来自C ++ 03,第6.4节

  

4作为switch语句之外的语句中的初始化声明的条件的值是隐式转换为bool类型的声明变量的值。如果转换形式不正确,该程序就会形成错误。在switch语句中作为初始化声明的条件的值是声明变量的值(如果它具有整数或枚举类型),或者是隐式转换为整数或枚举类型的变量。作为表达式的条件的值是表达式的值,对于除switch之外的语句,隐式转换为bool;如果转换形成不良,该计划就是格式错误。条件的值将被简称为“条件”,其中使用是明确的。

布尔转换在6.3.1.2中定义

  

6.3.1.2布尔类型

     

1当任何标量值转换为_Bool时,如果值比较等于0,则结果为0;否则,结果是1。

int是标量类型。我认为这是你的数组填充的内容,因为你可以在它们上使用一元++--

答案 1 :(得分:10)

假设array是int(或其他整数类型)的数组,当且仅当array[i][j] == 0

时,条件才为false

答案 2 :(得分:3)

如果if在投放到true时获得array[i][j]true将获得bool。如果array有例如floatint值,任何不等于0的值都将转换为true。对于用户定义的类型,情况可能不同。

答案 3 :(得分:0)

if语句的括号中需要一个布尔值。所以它会尝试显式地将你的表达式转换为布尔值。例如,对于整数和指针,非零值将为true,零值将为false。

因此,如果你的表达式(array [i] [j])可以转换为true,那么条件将为真。

答案 4 :(得分:0)

“条件”是bool表达式。在C ++中,int可以隐式转换为bool。 (其中0 =假,其他一切都是真的)。​​

答案 5 :(得分:0)

最好让您了解我是否按以下方式重写代码:

if((array[i][j])==true)
{
    --i;
    --j;
}

这意味着,if条件实际检查您的数组行和列值是否为布尔值true。然后它将进入你的if-block并递减i和j值,这意味着它将转移到你的数组的前一行和前一列。

当然,在实现之前,需要将数组值的数据类型转换为布尔值。