C 将指针数组传递给函数时,回调将如何发生?

C 将指针数组传递给函数时,回调将如何发生?,c,pointers,C,Pointers,当我通过排序函数传递指针数组时,我有另一个交换函数 (指针数组的)哪些确切变量要传递到swap函数中 不是将交换用作函数,而是直接将其复制到排序工作中 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

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

(指针数组的)哪些确切变量要传递到swap函数中

不是将交换用作函数,而是直接将其复制到排序工作中

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

顺便说一句,我在这里是一个彻头彻尾的noob,任何关于如何提问或编码的其他提示都将非常感谢。

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

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

改为考虑以下代码:<代码>交换< /代码>

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

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

您的
swap
函数什么都不做,因为C使用
按值调用。必须将指针传递给指针:

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

  *t1 = *t2;
  *t2 = t;
}
现在将指针的地址传递到函数中,并在给定的地址操作数据

t[0] is 2
t[0] is 6
你可以测试一下


编辑:前一个更快:)

我应该向函数传递哪些参数?如何将指针数组中指针的地址传递到函数中?