首页 > 解决方案 > 将指针数组传递给函数时如何发生回调?

问题描述

当我通过一个排序函数传递一个指针数组时,我有另一个用于交换的函数。

我将哪些确切的变量(指针数组)传递给交换函数?

不使用交换作为函数,而实际上只是将其直接复制到排序中。

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

顺便说一句,我在这里完全是菜鸟,关于如何提出问题或一般编码的任何其他提示将不胜感激。

标签: cpointers

解决方案


您正在使用的交换函数按值获取其每个指针参数,但是,对于所需的功能,需要通过(指针)引用来获取它们。

这里要区分的是swapteam通过(指针)引用(即,team *)获取类型值,但它team *通过值获取类型值。因此,它只交换它的本地引用,这就是为什么它直接插入到你的sort函数中就可以工作的原因。

相反,请考虑以下实现swap

void swap(team **t1, team **t2)
{
  team *t = *t1;
  *t1 = *t2;
  *t2 = t;
}

在这种情况下,swap获取(指针)对 type 值的引用team *,并交换它们。这现在适用于预期的用例。


推荐阅读