spacepaste

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