Обращение к одномерному массиву как к двумерному
От: agg  
Дата: 10.11.10 10:00
Оценка:
Привет всем, возник вопрос по массивам:

int n[100];


затем в один момент к этому массиву нужно обратится как к двумерному по индексам:

int **k;// так или как то по другому объявить его
... // как то преобразовать указатель на одномерный массив чтобы он стал двумерным
k[8][8]=1;


Подскажите пожалуйста как выполнить это преобразование?
Re: Обращение к одномерному массиву как к двумерному
От: Bell Россия  
Дата: 10.11.10 10:19
Оценка:
Здравствуйте, agg, Вы писали:

int main()
{
   int n[100] = {0};

   int (&n2_1)[10][10] = reinterpret_cast<int (&)[10][10]>(n);
   int (*n2_2)[10] = reinterpret_cast<int (*)[10]>(&n);

   n2_1[1][1] = 1;
   n2_2[2][2] = 2;

   return 0;
}


Только учти — все на твоей совести )
Любите книгу — источник знаний (с) М.Горький
Re: Обращение к одномерному массиву как к двумерному
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 10.11.10 10:23
Оценка:
Здравствуйте, agg, Вы писали:

agg>Привет всем, возник вопрос по массивам:


agg>
agg>int n[100];
agg>


agg>затем в один момент к этому массиву нужно обратится как к двумерному по индексам:


agg>
agg>int **k;// так или как то по другому объявить его
agg>... // как то преобразовать указатель на одномерный массив чтобы он стал двумерным
agg>k[8][8]=1;
agg>


agg>Подскажите пожалуйста как выполнить это преобразование?


reinterpret_cast<int (&)[10][10]>(n)[8][8] = 1;

Так сойдёт?

Это конечно шутка. Проще всего преобразовывать двумерный индекс к одномерному вручную.
Re: Обращение к одномерному массиву как к двумерному
От: se_sss  
Дата: 10.11.10 10:24
Оценка:
Здравствуйте, agg, Вы писали:

agg>Привет всем, возник вопрос по массивам:


agg>
agg>int n[100];
agg>


agg>затем в один момент к этому массиву нужно обратится как к двумерному по индексам:


agg>
agg>int **k;// так или как то по другому объявить его
agg>... // как то преобразовать указатель на одномерный массив чтобы он стал двумерным
agg>k[8][8]=1;
agg>


agg>Подскажите пожалуйста как выполнить это преобразование?


Варианты для с и с++:

//c
int main()
{
  int n[100];
  int (*v)[10][10] = (int (*)[10][10]) (&n[0]);
  (*v)[1][4] = 1;
}

//c++
int main()
{
  int n[100];
  int (&v)[10][10] = *reinterpret_cast<int (*)[10][10]>(&n[0]);
  v[1][4] = 1;
}
Re: Обращение к одномерному массиву как к двумерному
От: agg  
Дата: 11.11.10 12:10
Оценка:
Спасибо всем за участие и пожсказки
Re: Обращение к одномерному массиву как к двумерному
От: LaptevVV Россия  
Дата: 11.11.10 12:52
Оценка:
Здравствуйте, agg, Вы писали:

agg>Подскажите пожалуйста как выполнить это преобразование?

Самый просто вариант — использовать union.
Или размещающий new.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.