【问题标题】:Dynamics array from function to function in C visual studio 2017C Visual Studio 2017 中从函数到函数的动态数组
【发布时间】:2017-10-19 21:21:05
【问题描述】:

我需要从一个功能转移到另一个功能。我尝试这样:

    double toarray(double x,int n)
{
    double * results = new double[n];
    for (int j = 0; j < n; j++)
    {
        results[j] = function( x);
        x += jump;
    }
    return *results;
}

void showarr(double*arr[],int n,double x)
{
    for(int i=0;i<n;i++)
    {
        printf("Wynik dla x=" "%.2lf", x);
        if (denomcheck(x) == true && function(x)<INT_MAX)
        {
            printf(" | y=%.2lf \n", arr[i]);
        }
        else
            printf(" | MIANOWNIK = 0!!! \n");
        x += jump;
    } 
}

但是当我尝试调用 toarray 作为 showarr 的变量时:

showarr(toarray(x, n), n, x);

我在 vs 2017 中遇到 E0167 错误。

“参数类型“double”与参数类型“double **”不兼容”

【问题讨论】:

  • toarray() 应该返回 double *,而不是 double。你的编译器也应该警告你。此外,showarr() 应该接受 double *,而不是 double *[]
  • 你把CC++搞混了,为什么?
  • @WG97 向 C 标准委员会提议 double 和 double ** 类型兼容。
  • 谁是delete[]-当showarr 完成数组时?为什么不能使用std::vector&lt;double&gt;
  • @JohnBollinger 假设 jumpfunction 在外部声明,我不明白为什么编译器应该警告 toarray 的实现(除非编译器进行一些静态泄漏检查)

标签: c++ arrays visual-studio dynamic-arrays


【解决方案1】:

您的toarray 应该返回一个指向数组的指针,而不是单个双精度值:

double *toarray(double x,int n) {
     double * results = new double[n];
     ...
     return results;
}

showarr 应该处理一个双精度数组(作为指向此类数组的指针传递,可以写为double arr[]double *)而不是一个双精度指针数组(这是@ 的含义987654326@):

void showarr(double arr[],int n,double x) {
    ...

此外,您应该删除您创建的数组,即在之后不需要arr 的位置使用delete[] arr

【讨论】:

  • 值得一提的是函数参数double arr[]实际上是double* arr,而不是“数组”。
猜你喜欢
  • 2019-03-13
  • 2018-06-21
  • 2020-02-17
  • 2014-02-17
  • 2020-11-11
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多