fork download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. typedef struct Data_ {
  5. int x,y,z;
  6. // ...
  7. } Data;
  8.  
  9. typedef struct Array_ {
  10. Data * data;
  11. int size;
  12. int reserved;
  13. } Array;
  14.  
  15. Array* makeArray(int startSize)
  16. {
  17. Array * a = malloc(sizeof(Array));
  18. a->data = malloc(sizeof(Data)*startSize);
  19. a->reserved = startSize;
  20. a->size = 0;
  21. return a;
  22. };
  23.  
  24. void killArray(Array * a)
  25. {
  26. free(a->data);
  27. free(a);
  28. }
  29.  
  30.  
  31. Data * getData(Array* a)
  32. {
  33. return a->data;
  34. }
  35.  
  36. int sizeData(Array* a)
  37. {
  38. return a->size;
  39. }
  40.  
  41. void addData(Array* a, Data d)
  42. {
  43. if (a->size == a->reserved) // Full
  44. {
  45. a->data = realloc(a->data,sizeof(Data)*a->reserved*2);
  46. a->reserved *= 2;
  47. }
  48. a->data[a->size++] = d;
  49. }
  50.  
  51.  
  52. int main(int argc, const char * argv[])
  53. {
  54. int i;
  55. Array * a = makeArray(2);
  56. for(i = 0; i < 20; ++i)
  57. {
  58. Data d;
  59. d.x = i;
  60. d.y = 2*i;
  61. d.z = 3*i;
  62. addData(a,d);
  63. }
  64. for(i = 0; i < sizeData(a); ++i)
  65. {
  66. printf("%3d %3d %3d\n",getData(a)[i].x,getData(a)[i].y,getData(a)[i].z);
  67. }
  68.  
  69. killArray(a);
  70.  
  71. return 0;
  72. }
  73.  
  74.  
Success #stdin #stdout 0s 2292KB
stdin
Standard input is empty
stdout
  0   0   0
  1   2   3
  2   4   6
  3   6   9
  4   8  12
  5  10  15
  6  12  18
  7  14  21
  8  16  24
  9  18  27
 10  20  30
 11  22  33
 12  24  36
 13  26  39
 14  28  42
 15  30  45
 16  32  48
 17  34  51
 18  36  54
 19  38  57