Я бы предпочел игнорировать лишние строки или столбцы, если они не квадратные;это кажется наиболее разумным подходом, хотя это всего лишь предположение, поскольку диагональ неквадратной матрицы не определена, но, поскольку вы спрашиваете о 2-мерном массиве вместо матрицы, я предполагаю контекстВопрос заключается в программировании, а не в линейной алгебре.
Для этого вы можете получить минимальную длину строки и столбца, а затем выполнить итерацию от 0 до этой минимальной длины:
diag_len = min (row_size, col_size);
for (int i = 0; i < /* or <= */ diag_len; i++) {
answer += my_data[i][i];
}
Это работает как в квадрате, так и в случае квадрата с потерями.Ваш пример кода заканчивается с учетом координат каждой ячейки, что бесполезно, если вы знаете, что заботитесь только о тех случаях, когда row == col.(Это также устраняет необходимость в особом случае, когда строки и столбцы равны 0 и , что позволяет избежать деления, что является более медленной работой ЦП, чем сложение.)