LINUX.ORG.RU

История изменений

Исправление SZT, (текущая версия) :

Да, тут вообще чтобы аналог unsigned char array[w][h][2]; надо так делать

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int w=5;
  int h=4;
  int l=2;
  unsigned char (*array)[h][l] =(unsigned char (*)[h][l])malloc(w*h*l);
  {
    int cnt = 0;
    for(int w_i = 0; w_i < w; w_i++)
      for(int h_i = 0; h_i < h; h_i++)
        for(int l_i = 0; l_i < l; l_i++)
        {
          array[w_i][h_i][l_i] = cnt++;
        }
  }
  
  for(int w_i = 0; w_i < w; w_i++)
  {
    for(int h_i = 0; h_i < h; h_i++)
    {
      for(int l_i = 0; l_i < l; l_i++)
        printf("%d, ", array[w_i][h_i][l_i]);
      printf("\n");
    }
    printf("\n------------------\n");
  }
  free(array);
  return EXIT_SUCCESS; 
}
А каст в случае Си необязателен, да

Исходная версия SZT, :

Да, тут вообще чтобы аналог unsigned char array[w][h][2]; надо так делать

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int w=5;
  int h=4;
  int l=2;
  unsigned char (*array)[h][l] =(unsigned char (*)[h][l])malloc(w*h*l);
  {
    int cnt = 0;
    for(int w_i = 0; w_i < w; w_i++)
      for(int h_i = 0; h_i < h; h_i++)
        for(int l_i = 0; l_i < l; l_i++)
        {
          array[w_i][h_i][l_i] = cnt++;
        }
  }
  
  for(int w_i = 0; w_i < w; w_i++)
  {
    for(int h_i = 0; h_i < h; h_i++)
    {
      for(int l_i = 0; l_i < l; l_i++)
        printf("%d, ", array[w_i][h_i][l_i]);
      printf("\n");
    }
    printf("\n------------------\n");
  }
  free(array);
  return EXIT_SUCCESS; 
}