-
- //gcc --std=c11 -g -O0 -DDEBUG -Wall main.c
- //cat ./main.c
- #include <stdio.h>
- #include <string.h>
-
- typedef struct
- {
- size_t X;
- double Y;
- double Z;
-
- } Coordinate;
-
- typedef struct
- {
- Coordinate **coordinate;
- } Total;
-
- void count(Total *total)
- {
- (*total->coordinate)[0].X = 1ULL;
- (*total->coordinate)[1].Y = 2.0;
- (*total->coordinate)[2].Z = 3.0;
- }
-
- int main(void)
- {
- // Инициализация структуры total и создание указателя
- Total total_P; Total *total = &total_P;
- // Заполнение нулями (во избежание);
- memset(total,0x0,sizeof(Total));
-
- // Инициализация структуры в стеке
- Coordinate coordinate[3];
- // Заполнение нулями (во избежание);
- memset(&coordinate,0x0,sizeof(coordinate));
-
- // Промежуточных указатель на массив структур
- Coordinate *coordinate_P = coordinate;
-
- // Указатель на промежуточный указатель
- total->coordinate = &coordinate_P;
-
- // Хотелось бы обойтись без промежуточного указатея oordinate_P. Как-нибудь так:
- //total->coordinate = &coordinate[0];
-
- //Передать аргумент (указатель на структуру Total) в функцию
- count(total);
-
- // Вывод результата
- printf("X=%zu,Y=%.6f,Z=%.6f\n",
- (*total->coordinate)[0].X,
- (*total->coordinate)[1].Y,
- (*total->coordinate)[2].Z);
- }
-