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

标签 c pointers

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

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

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

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/

相关文章:

c - 如何使用按位运算将 1 加到 unsigned int 中的 float ?

c - 为什么我得到;使用类型为 'char *' 的表达式初始化 'const char *' 会丢弃限定符?

c - 检查传递给 gdb 中函数的多维数组

c++ - 从模板参数指向方法的指针

c++ - 指向存储在 map 容器中的数据的指针

C++ ifstream::read 混淆

c - 如何从文本行获取特定数据

c - ARM汇编跳转到地址

c - pthread_atfork 锁定习语坏了?

c - 通过函数中的指针修改结构成员