指向结构体

时间:2018-12-09 17:39:40

标签: c

我对这个话题有些困惑。假设我有这个结构:

typedef struct
{
    char a;
    int num;
} 
t_per;

,我想按t_per* datanum进行排序。然后我会做类似的事情:

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;
            }
        }
    }
}

为清晰起见而编辑。

1 个答案:

答案 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*的数组。