реклама на сайте
подробности

 
 
> Как элегантно с С++ сделать многомерный массив в С99 нотации?
iiv
сообщение Feb 1 2016, 12:22
Сообщение #1


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Добрый день,

имеем код, который без ошибок компилится в С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;
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 06:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01638 секунд с 7
ELECTRONIX ©2004-2016