gpt4 book ai didi

c - 指向结构体指针的指针

转载 作者:行者123 更新时间:2023-11-30 16:24:19 25 4
gpt4 key购买 nike

我对这个问题有点困惑。假设我有这个结构:

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

我想按 numt_per* 数据 进行排序。然后我会做类似的事情:

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** 数据 该怎么办?这是正确的吗?

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

为便于阅读而进行了编辑。

最佳答案

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

关于c - 指向结构体指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53694931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com