2016-04-22 2 views
0

Я использую C для своей программы. Я использую Ubuntu 14.04. Ниже приведена одна из циклов, которые я использую.Как получить доступ к трехмерному массиву вне цикла

for (x=0; x<1024; x++) 
{ 
    for (i=0; i<8; i++) 
    { 
     for (j=0; j<8; j++) 
     { 
      arr[x][i][j]=vi[8*i+j+gi]; 
     } 
    } 
    gi = gi+(8*8); 
} 

Здесь 'vi' представляет собой одномерный массив. Теперь массив «arr» имеет 1024 блока размером 8x8. Есть ли возможность доступа к блокам как таковым (размером 8х8) вне цикла для дальнейшей обработки?

ответ

5

Если массив x определен как что-то вроде int x[1024][8][8], то это означает, что x представляет собой массив из 1024 элементов, где каждый элемент равен int[8][8], а именно массив массивов из int. Поэтому, если вы хотите получить определенный элемент, просто используйте подписку для доступа к нему, так же как и доступ к обычным массивам. Например, вы используете x[0] для доступа к первому блоку 8x8 из x, x[1023] для доступа к последнему блоку.

+0

Спасибо вам большое !!!. Я определил тип данных 3D-массива как «unsigned char». Я использовал следующий код для доступа к массиву 8x8: for (w = 0; w <1024; w ++) {printf ("% u", arr [w]); }. Но я получаю ошибку вроде: «format«% u »ожидает аргумент типа« unsigned int », но аргумент 2 имеет тип« unsigned char ». Как распечатать и просмотреть все блоки? – Flower

+0

Определяется ли это как 'unsigned char x [1024] [8] [8]'? При печати и предварительном просмотре вы имеете в виду печать каждого из символов без знака? – fluter

+0

Да, он определен как unsigned char x [1024] [8] [8]. Я просто хочу напечатать все 1024 блока как 8x8 блоков. – Flower

1

Вы можете получить доступ по arr[i][j][k] где 0<=i<=1023,0<=j<=7 & 0<=k<=7

Смежные вопросы