Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как преобразовать char[16] к char[8][2]? 
:(
    Опции темы
Dims
Дата 17.2.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Забыл, можно ли в Си++ сделать такое?

Казалось бы, оба массива представляют собой участок памяти длиной 16 байт, только адресуются по-разному. 

Так можно ли при помощи такого или подобного преобразования управлять этим порядком?

Добавлено через 8 минут и 47 секунд
Вот так надо 

Код

char arr[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

    char *arr2[2];
    char (*arr3)[2];
        
    // arr2 = (char*[2])arr;
    arr3 = (char(*)[2])arr;

    arr3++;
    arr3++;
    arr3++;


Теперь осталось выяснить, можно ли шаг адреса сделать динамическим...
PM MAIL   Вверх
Ozerich
Дата 17.2.2010, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 2.8.2009
Где: Минск, Беларусь

Репутация: 4
Всего: 5



Код

char ms1[16],ms2[8][2];
for(int i = 0; i < 16; i++)
ms2[i / 2][i % 2] = ms1[i];


Так пойдёт?
--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP  Developer
PM MAIL ICQ Skype   Вверх
mes
Дата 17.2.2010, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Dims @  17.2.2010,  13:17 Найти цитируемый пост)
Так можно ли при помощи такого или подобного преобразования управлять этим порядком?

так  ? :
Код

char arr[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};


typedef char (char8x2_t)[8][2];
char8x2_t * parr = (char8x2_t* )&arr;

int main ()
{
    char arr[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

    for (int i=0; i<16;++i)  
      std::cout <<  (int)arr[i]<< " ";   
    std::cout << std::endl;
     
    for (int i=0; i<8;++i)    
     std::cout <<  (int)(*parr)[i][0]<< " ";

    for (int i=0; i<8;++i)    
     std::cout <<  (int)(*parr)[i][1]<< " ";
    std::cout << std::endl;
}


Добавлено через 5 минут и 18 секунд
если без введения доп указателя, то
Код

 ...((char8x2_t&)*arr)[i][0]
// или
 ...(*(char8x2_t*)arr)[i][1]



Это сообщение отредактировал(а) mes - 17.2.2010, 15:03


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0411 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.