c - 不知道如何正确定义我的交换函数
问题描述
我可以在一定程度上理解指针,但多层取消引用swap()
让我感到困惑。因此,我无法正确实现它。
以下是基于插入排序的字母排序代码:
void insertionSort(char **array,int rows,int cols)
{
for(int i=1;i<=rows-1;i++)
{
for(int j=i-1;strcmp(array[i],array[j])<0 && j>=0;j--)
{
swap(&array[i],&array[j]);
i--; //when swapped, subscript of key also drops
}
}
}
void swap(char **s1,char**s2)
{
char **temp=s1;
strcpy(*s1,*s2);
strcpy(*s2,*temp);
}
我知道swap()
执行错误。我希望知道如何逐步完成思考过程以正确实施swap()
(即如何更好地理解取消引用的多个层)
解决方案
你根本不想使用strcpy
。你只是想交换两个char *
s,你有指针(char **
s)。因此,实现应该与任何其他交换相同。临时值应该是 a char *
,并且您应该交换char *
值,而不是复制它们后面的字符串。
void swap(char **s1,char **s2)
{
char *temp = *s1;
*s1 = *s2;
*s2 = temp;
}
这与例如交换int
s 的函数完全相同,除了int
替换为char *
。
推荐阅读
- javascript - 从另一个存储切片中的一个存储切片调用一个 redux 操作
- julia - Julia:readdlm 因前导空白而失败
- string - 在 Python2 中替换 `encode()`
- python - 获取数据仅以空格正则表达式开头 - Python
- bixby - 如何制作启动特定应用程序的胶囊?
- r - 考虑回归不连续性中的固定效应(R 中的 rdrobust 包)
- ios - 将数组元素及其索引设置为标签
- batch-file - 批处理脚本将逗号读取为数字
- javascript - 使用切换式按钮在短段落和长段落之间切换
- power-automate - Power Automate 如何获取文件夹中的最新文件?