Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Как преобразовать char[16] к char[8][2]?


Автор: Dims 17.2.2010, 14:17
Забыл, можно ли в Си++ сделать такое?

Казалось бы, оба массива представляют собой участок памяти длиной 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++;


Теперь осталось выяснить, можно ли шаг адреса сделать динамическим...

Автор: Ozerich 17.2.2010, 14:26
Код

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


Так пойдёт?

Автор: mes 17.2.2010, 15:02
Цитата(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]


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)