-
- //gcc --std=c11 -g -O0 -DDEBUG -Wall main.c
- //cat ./main.c
- #include <stdio.h>
- #include <stdlib.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 realCoordinate[3];
- coordinate[0] = &realCoordinate[0];
- coordinate[1] = &realCoordinate[1];
- coordinate[2] = &realCoordinate[2];
-
- // Указатель на промежуточный указатель
- total->coordinate = coordinate;
-
- //Передать аргумент (указатель на структуру Total) в функцию
- count(total);
-
- // Вывод результата
- printf("X_0=%zu,Y_1=%.6f,Z_2=%.6f\n",total->coordinate[0]->X,total->coordinate[1]->Y,total->coordinate[2]->Z);
- }
-