Сяп, лор!
Хочу посчитать сумму элементов в двумерном массиве:
constexpr int sum_2d_array(const int* arr, int n, int m)
{
int s = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
s += arr[i*m + j];
return s;
}
int main()
{
constexpr int arr[3][2] = { 1, 2, 3, 4, 5, 6, };
static_assert(sum_2d_array(&arr[0][0], 3, 2) == 21);
}
Но компилятор не компилирует (https://wandbox.org/permlink/2zCNyzWAT4Txk2uV), говорит, что доступ к элементам просходит за границами массива.
Я вроде нигде за границы не вылазею. В чём проблема?
(Код написан по аналогии с кодом в Страуструпе для печати 2d-массива:
void print_mij(int∗ m, int dim1, int dim2)
{
for (int i = 0; i!=dim1; i++) {
for (int j = 0; j!=dim2; j++)
cout << m[i∗dim2+j] << '\t'; // obscure
cout << '\n';
}
}