首页 > 解决方案 > 不知道如何正确定义我的交换函数

问题描述

我可以在一定程度上理解指针,但多层取消引用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()(即如何更好地理解取消引用的多个层)

标签: cpointers

解决方案


你根本不想使用strcpy。你只是想交换两个char *s,你有指针(char **s)。因此,实现应该与任何其他交换相同。临时值应该是 a char *,并且您应该交换char *值,而不是复制它们后面的字符串。

void swap(char **s1,char **s2)
{
   char *temp = *s1;
   *s1 = *s2;
   *s2 = temp;
}

这与例如交换ints 的函数完全相同,除了int替换为char *


推荐阅读