当我通过排序函数传递指针数组时,我有另一个用于交换的函数。
我应该将哪些变量(指针数组的)传递给交换函数?
不使用交换作为函数,而实际上只是将其直接复制到排序工作中。
typedef struct team
{
int val;
} team;
void swap(team *t1, team *t2);
void sort(team *t[4]);
void swap(team *t1, team *t2)
{
team *t = t1;
t1 = t2;
t2 = t;
}
void sort(team *t[4])
{
printf("t[0] is %d\n", t[0]);
// I have a sorting algorithm here that uses this swap
swap(t[0], t[1]);
printf("t[0] is %d\n", t[0]);
}
int main()
{
team table[4] = {2, 6, 7, 8};
team *aop[4] = {&table[0], &table[1], &table[2], &table[3]};
sort(aop);
return 0;
}
顺便说一句,我在这里完全是个菜鸟,任何有关如何提出问题或编码的其他提示将不胜感激。
最佳答案
您使用的交换函数按值获取其每个指针参数,但是,为了实现所需的功能,需要通过(指针)引用获取它们。
这里要注意的区别是 swap 的值类型为 team
通过(指针)引用(即 team *
),但它采用 team *
类型的值按值(value)。因此,它只交换其本地引用,这就是为什么它直接插入到您的 sort
中它可以工作。功能。
相反,请考虑 swap
的以下实现
void swap(team **t1, team **t2)
{
team *t = *t1;
*t1 = *t2;
*t2 = t;
}
在本例中,swap
接受对 team *
类型值的(指针)引用,并交换它们。这现在适用于预期的用例。
关于c - 将指针数组传递给函数时,回调将如何发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56562107/