c++ 错误:数组下标的类型“double*[double]”无效

zvms9eto  于 2023-08-09  发布在  其他
关注(0)|答案(2)|浏览(257)

我正在尝试创建一个程序,它将把所有的真实的放在一个数组中--数字的排序在一个单独的函数中进行--按降序排列,并将它们打印出来。
以下是我目前为止的程序,但根据编译器,它有2个问题:(i)在第22行("return N[t];"),我得到“error: invalid types 'double*[double]' for array subscript“。
(ii)在第28行(“cout << sort_array(Q[100]) << " " "),我得到“error: cannot convert 'double' to 'double*' for argument '1' to 'double* sort_array(double*)'“。
我不太明白为什么会出现这两个错误,但我希望得到一些帮助来解决它们。

#include <iostream>
#include <cstdlib>

using namespace std;

double *sort_array (double *N) {
double t;
    int size=100, a, b;

for (t=0; t<size; t++)
        *N = rand()%250;

    for (a=1; a<size; a++) {
        for (b=size-1; b>=a; b--) {
            if (N[b-1] < N[b]) {
                t = N[b-1];
                N[b-1] = N[b];
                N[b] = t;
            }
        }
    }
    return N[t];
}

int main()
{
    double Q[100];
        cout << sort_array(Q[100]) << " ";
        cout << endl;

    return 0;
}

字符串

mf98qq94

mf98qq941#

问题是sort_array(Q[100])语句。这是告诉编译器使用Q数组中的第101个double(实际上是越界的)调用sort_array。您实际上只想传入Q而不是Q[100]
但是,请注意,传递C风格的数组(例如double*)会丢失长度信息,并且不是规范的C++。相反,您可以使用vector来携带数组和大小。
编辑:因为你是在修改数据,所以你的函数根本不需要返回任何东西。将其更改为void,然后跳过结尾处的返回。然后,您必须迭代vector/array以打印出每个元素。cout不提供打印聚合的内置功能。
最后,The Definitive C++ Book Guide and List的一本书可能会帮助你快速了解C++的概念。

mzmfm0qo

mzmfm0qo2#

第一个错误是因为N[t]是一个double(意思是“N的第t个元素”),但你的函数返回一个double*。实际上,你的函数看起来不应该返回任何东西。它对N指向的数据进行排序,因此不需要返回任何内容。您可能应该切换到void返回值。
第二个错误是因为Q[100]是一个double(它意味着“Q的第101个元素,这无论如何都是一个错误,因为Q的最后一个元素是Q[99],因为C++中的数组索引从0开始,而不是1),但您的函数需要double。我假设你实际上想做的是:

sort_array(Q)

字符串
将指针直接传递给第一个元素。
请记住,在传递数组时,只需传递数组第一个元素的地址。在这种情况下,Q,相当于&Q[0],但更容易编写。

相关问题