Помогите понять маленький кусок кода
Помогите объяснить некоторые строки кода в функции Интересует, что означают/делают строки maxSum = (maxSum < underDiagonal) ? underDiagonal : maxSum; и maxSum = (maxSum < aboveDiagonal) ? aboveDiagonal : maxSum; Что означает знак вопроса и что в целом происходит
int maxsum(int** arr,int n)
{
int maxSum = 1, underDiagonal = 0, aboveDiagonal = 0;
for (int i = 1; i < n; i++)
{
underDiagonal = 0;
for (int j = 0, k = j; j < n - i; j++, k++)
{
underDiagonal += arr[j + i][k];
}
maxSum = (maxSum < underDiagonal) ? underDiagonal : maxSum;
}
for (int i = 1; i < n; i++)
{
aboveDiagonal = 0;
for (int j = 0, k = j; j < n - i; j++, k++)
{
aboveDiagonal += arr[j][k + i];
}
maxSum = (maxSum < aboveDiagonal) ? aboveDiagonal : maxSum;
return maxSum;
}
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Выражение a ? b : с вычисляет логическое значение a, и если оно истинно - возвращает значение b, в противном случае - значение c.
По сути
maxSum = (maxSum < underDiagonal) ? underDiagonal : maxSum;
переписывается как
if (maxSum < underDiagonal) maxSum = underDiagonal;
(В соответствии с определением, конечно, как
if (maxSum < underDiagonal) maxSum = underDiagonal; else maxSum = maxSum;
но понятно, что ветвь else по сути не делает ничего и может быть выброшена.)