我对这个话题有些困惑。假设我有这个结构:
typedef struct
{
char a;
int num;
}
t_per;
,我想按t_per* data
对num
进行排序。然后我会做类似的事情:
void sort(t_per* data)
{
int i = 0, j = 0;
t_per aux;
for(i = 0; data[i].num != 0; i++)
{
for(j = i + 1; data[j].num != 0; j++)
{
if(data[i].num > data[j].num)
{
aux = data[i];
data[i] = data[j];
data[j] = aux;
}
}
}
}
但是,如果我有t_per** data
怎么办?这是正确的吗?
void sort(t_per** data)
{
int i = 0, j = 0;
t_per aux;
for(i = 0; (*data[i]).num != 0; i++)
{
for(j = i + 1; (*data[j]).num != 0; j++)
{
if((*data[i]).num > (*data[j]).num)
{
aux = *data[i];
*data[i] = *data[j];
*data[j] = aux;
}
}
}
}
为清晰起见而编辑。
答案 0 :(得分:0)
将data
明确地作为指针数组可能会有所帮助。我不确定您使用t_per**
的目的,通常可以采用它来降低复制t_per
结构的成本。这种排序将在存储指向结构的指针的数组上进行,并交换数组中的指针而不是t_per
本身。在Java这样的语言(对象本身就是指针)中,它应该与void sort(T_PER[] data)
相同。
void sort(t_per* data[])
{
int i = 0, j = 0;
t_per* aux;
for(i = 0; data[i]->num != 0; i++)
{
for(j = i + 1; data[j]->num != 0; j++)
{
if (data[i]->num > data[j]->num)
{
aux = data[i];
data[i] = data[j];
data[j] = aux;
}
}
}
}
但是,如果您决定直接在t_per
对象上进行写入或交换,则代码将起作用。无论如何,您都应确保data
是存储t_per*
的数组。