Я добавил другую структуру с одним элементом, который является указателем
typedef struct ptr_point{
point * p;
} ptr_point;
Я отредактировал функцию reversePoints
void reversePoints(point *pts, int len, ptr_point *rev){
// This function is used only to test pointers
int i = 0;
int j = len;
while (i < len){
j=len-i-1;
rev[j].p = &pts[i];
i++;
}
}
и добавил еще одну функцию для печати ptr_points
void printPtrPoints(ptr_point *pts,int len){
int i = 0;
while (i < len){
printf("id %d x %f y%f z %f\n",pts->p->id,pts->p->x,pts->p->y,pts->p->z);
pts++;
i++;
}
}
и объявление второго массива как массива ptr_point
ptr_point rev_points[len];
В заключение: теперь данные во втором массиве не реплицируются, а указывают на элементную структуру первого массива.
Необходимость не реплицировать данные возникает в присутствии миллионов координатных точек, которые, если реплицируются более одного раза, сортируя их, например, по x, y, z и т. Д., Занимают много памяти с трудностями управления,
Однако это исправление заставляет меня использовать структура-> тип, чтобы изменить режим доступа для чтения или установки значений.
Я не знаю, является ли это лучшим решением, но оно решило проблему, не дублируя данные.
Вы можете запустить исходный код с исправлениями здесь: https://onlinegdb.com/SknP_i-eS
Спасибо всем за совет.