C 将指针数组传递给函数时,回调将如何发生?
当我通过排序函数传递指针数组时,我有另一个交换函数 (指针数组的)哪些确切变量要传递到swap函数中 不是将交换用作函数,而是直接将其复制到排序工作中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
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
你可以测试一下
编辑:前一个更快:)我应该向函数传递哪些参数?如何将指针数组中指针的地址传递到函数中?