fork download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. typedef int T;
  6.  
  7. T** create(int N, int M)
  8. {
  9. T** arr = (T**)malloc(2*sizeof(int)+N*(sizeof(T*)+M*sizeof(T)));
  10. *((int*)arr) = N;
  11. *((int*)arr+1) = M;
  12. arr = (T**)((char*)arr+2*sizeof(int));
  13.  
  14. for(int i = N, ofs = N*sizeof(T*);
  15. i-->0; ofs += M*sizeof(T))
  16. arr[i] = (T*)((char*)arr + ofs);
  17.  
  18. return arr;
  19. }
  20.  
  21. void kill(T** arr)
  22. {
  23. free((char*)arr-2*sizeof(int));
  24. }
  25.  
  26. int rows(T**arr)
  27. {
  28. return *(int*)((char*)arr-2*sizeof(int));
  29. }
  30.  
  31. int cols(T**arr)
  32. {
  33. return *(int*)((char*)arr-sizeof(int));
  34. }
  35.  
  36. void work(T**arr)
  37. {
  38. for(int i = 0; i < rows(arr); ++i)
  39. for(int j = 0; j < cols(arr); ++j)
  40. arr[i][j] = 10*i+j;
  41.  
  42.  
  43. for(int i = 0; i < rows(arr); ++i)
  44. {
  45. for(int j = 0; j < cols(arr); ++j)
  46. {
  47. printf("%02d ",arr[i][j]);
  48. }
  49. puts("");
  50. }
  51. }
  52.  
  53. int main(int argc, const char * argv[])
  54. {
  55. T** arr = create(5,8);
  56. work(arr);
  57. kill(arr);
  58.  
  59. puts("");
  60.  
  61. arr = create(8,5);
  62. work(arr);
  63. kill(arr);
  64.  
  65. }
  66.  
Success #stdin #stdout 0s 4372KB
stdin
Standard input is empty
stdout
00  01  02  03  04  05  06  07  
10  11  12  13  14  15  16  17  
20  21  22  23  24  25  26  27  
30  31  32  33  34  35  36  37  
40  41  42  43  44  45  46  47  

00  01  02  03  04  
10  11  12  13  14  
20  21  22  23  24  
30  31  32  33  34  
40  41  42  43  44  
50  51  52  53  54  
60  61  62  63  64  
70  71  72  73  74