【问题标题】:Array and type/value errors in sorting function排序函数中的数组和类型/值错误
【发布时间】:2017-03-03 09:37:31
【问题描述】:

我收到了各种我不理解的错误和警告。

  • 错误:带有数组的前两个函数中的“下标值既不是数组也不是指针也不是向量”

  • 警告:传递“SelectionSort”的参数 1 会从指针生成整数而不进行强制转换 int s = SelectionSort(arr, len);

  • 注意:预期为“int”,但参数类型为“int *”:void SelectionSort(int arr, int len) {

  • 错误:不应忽略 void 值:int s = SelectionSort(arr, len);

听起来它们很简单,但类型和值是我的弱点!任何指针? (双关语无意)

int find_maxind(int arr, int len) {
    if(len == 1) return 0;
    int ind = find_maxind(arr,len-1);
    return (arr[ind] > arr[len-1])?ind:len-1;
}

void SelectionSort(int arr, int len) { //this cannot change
    if(len <= 1) return;
    int max_ind = find_maxind(arr,len);
    int temp = arr[max_ind];
    arr[max_ind] = arr[len-1];
    arr[len-1] = temp;
    SelectionSort(arr, len-1);
}

int main(){ //testing the sorting
  int arr[] = {1,2,3,4,5,6,7,8,9,11,13,15,17};
  int len = 13;
  int s = SelectionSort(arr, len);
}

【问题讨论】:

  • 发布有关构建错误的问题时,请包含未编辑的完整错误输出完整。还要指出错误在源中的位置,例如 cmets。
  • int find_maxind(int arr, int len) { --> int find_maxind(int arr[], int len) {
  • 您的函数被声明为采用int arr,这正是一个名为数组的整数。你想传递一个数组,int[] arr
  • int s = SelectionSort(arr, len); 也是错误的,原因很明显
  • 嗯...void SelectionSort(int arr, int len) - 你想要一个数组,int find_maxind(int arr, int len) 也是如此?

标签: c arrays


【解决方案1】:

完整的工作代码。

int find_maxind(int arr[], int len) {
if(len == 1) return 0;
int ind = find_maxind(arr,len-1);

return (arr[ind] > arr[len-1])?ind:len-1;
}

void SelectionSort(int arr[], int len) { //this cannot change
     if(len <= 1) return;
     int max_ind = find_maxind(arr,len);
     int temp = arr[max_ind];
     arr[max_ind] = arr[len-1];
     arr[len-1] = temp;
     SelectionSort(arr, len-1);
}

int main(){ //testing the sorting
     int arr[] = {1,2,3,4,5,6,7,8,9,11,13,15,17};
     int len = 13;
     SelectionSort(arr, len);
}

基本上你的程序需要一些改变:

 int find_maxind(int arr, int len) to int find_maxind(int arr[], int len)

 void SelectionSort(int arr, int len) to void SelectionSort(int arr[], int len)
  

因为您在 SelectionSort(arr, len);

中传递了 arr

希望你能得到答案。

【讨论】:

  • 您在 SelectionSort(arr, len) 中传递了“arr”;所以在函数中: 1. 代替“find_maxind(int arr, int len)”,改为“int find_maxind(int arr[], int len)”。
  • Saif,最好在答案中包含该解释。
  • 在答案中包含解释。 :)
  • 这样好多了:)
  • 谢谢,我确实尝试过使用 arr[] 但不是因为我认为我不应该改变的 void。但似乎我没有太多选择。谢谢!
【解决方案2】:

这里有几个问题:

int find_maxind(int arr, int len) {

只取一个整数而不是你想要的数组。把它改成这样:

int find_maxind(int[] arr, int len) {

至于您的第二个错误:您的 SelectionSort 函数被定义为具有 void 返回类型,这意味着它不返回任何内容。因此,当您尝试将其返回值分配给s 时,编译器会抱怨:

  int s = SelectionSort(arr, len);

你看,这个函数没有返回任何东西(当然没有 int),所以将它的返回值分配给任何东西都是荒谬的。

还有更多问题,但这些是您的错误提到的问题。 我建议您在处理此类问题之前阅读更多关于 C 中的指针和数组的内容。还有返回类型。

【讨论】:

    【解决方案3】:

    试试下面的代码是否有效:

    #include<stdio.h>
    
    int find_maxind(int arr[], int len) 
    {
        if(len == 1) return 0;
        int ind = find_maxind(arr,len-1);
        return (arr[ind] > arr[len-1])?ind:len-1;
    }
    
    void SelectionSort(int arr[], int len) 
    { //this cannot change
        if(len <= 1) return;
        int max_ind = find_maxind(arr,len);
        int temp = arr[max_ind];
        arr[max_ind] = arr[len-1];
        arr[len-1] = temp;
        SelectionSort(arr, len-1);
    }
    
    int main(){ //testing the sorting
      int arr[] = {17,2,3,4,5,6,7,8,9,11,13,15,1};
      int len = 13;
      SelectionSort(arr, len);
      for (int i=0;i<len;i++)
      {
          printf("%d\n",arr[i]);
      }
    }
    

    您正在传递一个数组并接收一个 int 类型,这肯定会产生问题。

    您可以使用数组类型或指针类型捕获数组,但不能像现在在代码中那样使用主要类型的变量。

    【讨论】:

      【解决方案4】:
      1. 您的函数没有将数组作为输入。你只是传递整数。您应该将函数 find_maxindSelectionSort 更改为 int find_maxind(int* arr, int len)void SelectionSort(int* arr, int len)

      2. 函数SelectionSort 不返回任何内容。所以在main函数中,将调用从int s = SelectionSort(arr, len);改为SelectionSort(arr, len);

      3. 您的数组arr 已经排序。我没有看到调用选择排序的意义。你可以改变这个数组。

      【讨论】:

        猜你喜欢
        • 2015-11-16
        • 2012-01-10
        • 1970-01-01
        • 2017-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-01
        • 1970-01-01
        相关资源
        最近更新 更多