Я новичок в 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 или что-то еще?
int vis[25], g[25][25], Ty[25][25];
Объявляет 3 массива. «vis» — это одномерный массив размером 25, «g» — это двумерный массив размером 25×25, то же самое с «Ty».
if(!vis[i] && g[x][i] == 1 && Ty[f][i] != n) {...}
В C ++ целые числа оцениваются как «false» в логических выражениях, если значение равно 0, и «true» для всех других значений. Таким образом, в операторе if первое выражение «! Vis [i]» будет иметь значение true, когда vis [i] == 0.
Второе выражение будет иметь значение true, если значение индекса [x] [i] в «g» равно 1.
Третье утверждение будет иметь значение true, если значение по индексу [f] [i] в ’Ty’ не равно некоторой переменной ‘n’, которая предположительно определена где-то в вашей программе, например ‘x’.
* Примечание — как отмечено в комментарии drescherjm, цикл for должен идти только до 24, поскольку размер ваших массивов равен 25 в любом направлении, поэтому доступ к элементу за пределами диапазона 0-24 (включительно) является неопределенным поведением.
int
только false
если это 0
, Это означает, что с любым другим числом строка истинна.!
перед логическим утверждением отрицает это.Так что, если проверить:
массив vis
на позиции i
должен быть 0
,
!vis[i] == !(vis[i] != 0) == vis[i] == 0
Значение массива g
на x
, i
должен быть один
Ty
на позиции f
, i
не может быть равно значению в n