spacepaste

  1.  
  2. //gcc --std=c11 -g -O0 -DDEBUG -Wall main.c
  3. //cat ./main.c
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. typedef struct
  8. {
  9. size_t X;
  10. double Y;
  11. double Z;
  12. } Coordinate;
  13. typedef struct
  14. {
  15. Coordinate **coordinate;
  16. } Total;
  17. void count(Total *total)
  18. {
  19. total->coordinate[0]->X = 1ULL;
  20. total->coordinate[1]->Y = 2.0;
  21. total->coordinate[2]->Z = 3.0;
  22. }
  23. int main(void)
  24. {
  25. // Инициализация структуры total и создание указателя
  26. Total total_P; Total *total = &total_P;
  27. // Заполнение нулями (во избежание);
  28. memset(total,0x0,sizeof(Total));
  29. // Инициализация структуры в куче
  30. Coordinate *coordinate[3];
  31. // Заполнение нулями (во избежание);
  32. memset(&coordinate,0x0,sizeof(coordinate));
  33. // Выделение памяти в куче
  34. Coordinate realCoordinate[3];
  35. coordinate[0] = &realCoordinate[0];
  36. coordinate[1] = &realCoordinate[1];
  37. coordinate[2] = &realCoordinate[2];
  38. // Указатель на промежуточный указатель
  39. total->coordinate = coordinate;
  40. //Передать аргумент (указатель на структуру Total) в функцию
  41. count(total);
  42. // Вывод результата
  43. printf("X_0=%zu,Y_1=%.6f,Z_2=%.6f\n",total->coordinate[0]->X,total->coordinate[1]->Y,total->coordinate[2]->Z);
  44. }
  45.