Добрый день,
имеем код, который без ошибок компилится в С99 и отказывается компилиться в С++ (хоть в 14, хоть в 11 стандарте). Основная проблема - массив, то есть в функции test, пришедший одномерный массив А маппится в 2-мерный, хочется такую же конструкцию также коротко и ясно использовать с С++, конкретно в GNU. Нужна именно конструкция без указателя на указатель, иначе работать будет долго (конкретно в этом примере - все равно, но если так сделал с пермутацией 5-мерного массива, скорость будет очень заметна).
Пожалуйста, посоветуйте, если ли какой-то красивый способ в С++, или способом является не переход с С99 на С++?
Спасибо
ИИВ
Код
#include <stdio.h>
void test(const int N, const int M, int *A)
{ int i, j;
typedef tA[M];
tA *pA=(void*)A;
for(i=0; i<N; i++)
for(j=0; j<M; j++)
pA[i][j]+=(i-j)*(i-j);
return;
}
int main(void)
{ const int M=10;
const int N=12;
int A[N][M];
int i, j;
for(i=0; i<N; i++)
for(j=0; j<M; j++)
A[i][j]=-(i-j)*(i-j);
test(N, M, (int*)A);
for(i=0; i<N; i++)
for(j=0; j<M; j++)
printf("%d ", A[i][j]); // если все правильно, то должны напечататься нули
printf("\n");
return 0;
}