我只是学习阶段的初学者。
我应该安排point
(x
,y
,z
)的结构,以便结构p[n]
具有最大的x
{1}}存储在其中。我的方法是否正确?如果没有,有没有简单的方法来做到这一点?
struct point
{
float x;
float y;
} p[1000];
void sortptx(struct point *t, int ctr);
int main()
{
int n = 100;
sortptx(&p, n);
return 0;
}
void sortptx(struct point *t, int ctr)
{
float temp;
int i;
for(i = 0; i < ctr-1; i++)
{
if (t[ctr]->x < t[i]->x)
{
temp = t[ctr]->x;
t[ctr]->x = t[i]->x;
t[i]->x = temp;
}
}
}
答案 0 :(得分:0)
这里至少有一些错误:
如评论中所述,struct point *t
是指向单个struct point
的指针或点数组。 不是指向struct point
指针数组的指针。因此t[i]->x
应为t[i].x
。
如果ctr
是一个点数组的长度,t[ctr]
将在数组的末尾运行,并且可以访问未初始化的内存。在这种情况下,t[ctr-1]
将是数组的最后一个元素。
不是交换整个点,而是交换x坐标。
答案 1 :(得分:0)
根据我的理解,您不希望对其进行排序,但查找最大point
的{{1}}并确保其存储在x
。
p[n-1]
这就是它的样子:
struct point
{
float x;
float y;
} p[1000];
此函数将void max(struct point *t, int ctr)
{
struct point temp;
int i;
for(i = 0; i < (ctr - 1); i++)
{
if (t[ctr - 1].x < t[i].x)
{
temp = t[ctr - 1];
t[ctr - 1] = t[i];
t[i] = temp;
}
}
}
作为参数,这是指向struct point *t
的第一个point
的指针。 p
t[i]
位于索引struct point
(不是i
的指针),因此您在访问其成员时使用struct point
而不是.
。并且由于您从零开始索引,因此大小为->
的数组的最后一个元素具有索引n
,这是存储具有最高n-1
的{{1}}的位置。
示例:
struct point
输出:x