C ++ если утверждение объяснение путаницы

Я новичок в 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 или что-то еще?

-3

Решение

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 (включительно) является неопределенным поведением.

1

Другие решения

  • int только false если это 0, Это означает, что с любым другим числом строка истинна.
  • ! перед логическим утверждением отрицает это.

Так что, если проверить:

  1. массив vis на позиции i должен быть 0,

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

  2. Значение массива g на x, i должен быть один

  3. Массив Ty на позиции f, i не может быть равно значению в n
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector