//gcc --std=c11 -g -O0 -DDEBUG -Wall main.c //cat ./main.c #include #include #include 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); }