Ответ 1
Предполагая, что массив представляет собой массив из int (или других интегральных типов), условие будет ложным тогда и только тогда, когда array[i][j] == 0
Я нашел этот "С++" сегодня, и я не могу его понять:
if(array[i][j]) {--i;--j;}
Может ли кто-нибудь объяснить мне, как эта работа? Я просто не понимаю. Какое здесь условие? Кажется, это было бы правдой каждый раз, но когда я избавился от IF (так осталось только это {--i;--j;}
.), Это не сработает.
Я новичок в С++, так что легко объясним!:)
Спасибо!
Предполагая, что массив представляет собой массив из int (или других интегральных типов), условие будет ложным тогда и только тогда, когда array[i][j] == 0
В С++ ненулевое значение может использоваться для обозначения "успеха" в условном выражении.
Это от C99, раздел 6.8.4.1:
Заявление
if
2 В обеих формах первое подмножество выполняется, если выражение сравнивается с не равным 0.
Из С++ 03, раздел 6.4
4 Значение условия, которое является инициализированным объявлением в операторе, отличном от оператора switch, представляет собой значение объявленной переменной, неявно преобразованное в тип bool. Если это преобразование плохо сформировано, программа плохо сформирована. Значение условия, которое является инициализированным объявлением в выражении switch, является значением объявленной переменной, если оно имеет целочисленный или перечисляемый тип, или же эту переменную, неявно преобразованную в интегральный или нулевой тип в противном случае. Значение условия, которое является выражением, является значением выражения, неявно преобразованного в bool для операторов, отличных от switch; если это преобразование плохо сформировано, программа плохо сформирована. Значение условия будет называться просто "условием", где использование недвусмысленно.
И логическое преобразование определено в 6.3.1.2
6.3.1.2 Булев тип
1 Когда любое скалярное значение преобразуется в _Bool, результат равен 0, если значение сравнивается с 0; в противном случае результат равен 1.
И int
является скалярным типом. Я предполагаю, что ваш массив заполнен, поскольку вы можете использовать унарные ++
и --
на них.
if
получает true
, если array[i][j]
получает true
при нажатии на bool
. Если array
имеет, например, float
или int
, все, что не равно 0
, будут добавлены к true
. Ситуация может отличаться для пользовательских типов.
Оператор if требует логического значения в своих круглых скобках. Таким образом, он попытается явно передать все, что ваше выражение в логическое. Например, для целых чисел и указателей ненулевое значение будет истинным, а нулевое значение будет ложным.
Итак, если ваше выражение (array [i] [j]) может быть передано в true, тогда условие будет истинным.
"условие" является выражением bool
. В С++ int
может быть неявно отбрасываться на bool
. (где 0 = false, а все остальное - true).
Было бы лучше, если бы вы поняли, переписываю ли ваш код следующим образом:
if((array[i][j])==true)
{
--i;
--j;
}
Итак, это означает, что условие if действительно проверяет, является ли значение строки и столбца массива логическим значением true. Затем он войдет в ваш if-блок и уменьшит значения я и j, что означает, что он переключится на предыдущую строку и предыдущий столбец вашего массива.
Конечно, вам нужно указать тип данных вашего значения массива в boolean до его реализации.