c - 将指针数组传递给函数时如何发生回调?
问题描述
当我通过一个排序函数传递一个指针数组时,我有另一个用于交换的函数。
我将哪些确切的变量(指针数组)传递给交换函数?
不使用交换作为函数,而实际上只是将其直接复制到排序中。
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;
}
顺便说一句,我在这里完全是菜鸟,关于如何提出问题或一般编码的任何其他提示将不胜感激。
解决方案
您正在使用的交换函数按值获取其每个指针参数,但是,对于所需的功能,需要通过(指针)引用来获取它们。
这里要区分的是swapteam
通过(指针)引用(即,team *
)获取类型值,但它team *
通过值获取类型值。因此,它只交换它的本地引用,这就是为什么它直接插入到你的sort
函数中就可以工作的原因。
相反,请考虑以下实现swap
void swap(team **t1, team **t2)
{
team *t = *t1;
*t1 = *t2;
*t2 = t;
}
在这种情况下,swap
获取(指针)对 type 值的引用team *
,并交换它们。这现在适用于预期的用例。
推荐阅读
- php - 将空模型传递给 vue 类型转换错误
- php - Laravel:查询生成器创建复数名称:columns_id 而不是 column_id
- wordpress - 如何通过 REST-API 为 Wordpress Post 的插件字段设置值
- javascript - 创建excel文件并使用ExcelJS写入
- android - 默认 FirebaseApp 未初始化错误
- python - Python如何在不清除用户输入的情况下清除屏幕?
- mysql - 通过 SQL 向 Moodle 课程添加练习
- r - 带有 ggplot2 的标准 eval 没有 `aes_string()`
- python - ValueError:检查目标时出错:预期dense_13具有形状(无,6)但得到的数组具有形状(6、1)
- javascript - 是否需要为可观察对象使用加载可观察切换?