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