【问题标题】:Dynamic array as function argument动态数组作为函数参数
【发布时间】:2013-04-30 19:31:49
【问题描述】:

在我的程序的主函数中,我创建了具有在变量中指定的元素数量的动态数组(在删除计算数组后):

cin >> bok;

double **macierz;
macierz = new double *[bok];
for(int i = 0; i < bok; ++i){
    macierz[i] = new double[bok];
}

Array macierz(波兰语中的矩阵)用于计算它与我编写的另一个函数的行列式:

#include <iostream>
#include <conio.h>
#include <string>
#include <math.h>

double determinant(double b[][bok],int m);

// there is int main(){ ... }

double determinant(double b[][bok],int m){

int i, j;
double sum = 0,

double **c;                 //Second array that throws "type 'double' unexpected"
c = new double *[m];
for(int i = 0; i < m; ++i){
    c[i] = new double[m];
}

if(m==2){
    sum = b[0][0]*b[1][1] - b[0][1]*b[1][0];
    return sum;
}

for(int p=0; p<m; p++){
    int h = 0,k = 0;
    for(i=1; i<m; i++){
        for(j=0;j<m;j++){
            if(j==p)
                continue;
            c[h][k] = b[i][j];
            k++;
        if(k == m-1){
            h++;
            k = 0;
        }

        }
    }

sum = sum + b[0][p]*(pow((float)-1,p))*determinant(c,m-1);
}

for(int i = 0; i < m; ++i){          //Removing second array
    delete[] c[i];
}
delete[] c;
return sum;
}

这里是main函数中的地方,上面一个是用来计算行列式的:

    double det;
    det = determinant(macierz, bok);     //bok was entered by user

问题是,数组 macierz 被创建为动态的,以允许用户输入数字,这将是数组行/列的数量(它是方阵,所以行数等于数字列)。它完美地工作,直到我创建了需要这个动态数组作为参数之一的函数。

determinant 函数的声明应该如何修改才能使用 macierz 数组作为它的第一个参数?还有一件小事 - determinant 函数中的数组 c 也抛出错误(它是下一个动态数组,但我不明白,为什么它不起作用 - 我已经像 macierz 一样创建和删除它,但编译器抛出“type 'double' unexpected”)

【问题讨论】:

  • 需要动态数组使用:std::vector&lt;double&gt; obj;需要二维数组使用std::vector&lt;std::vector&lt;double&gt;&gt; obj;
  • @AlokSave:请告诉我如何将向量的向量传递到我的 GPU,或者启动 DMA 事务以将其传输到我的 NIC...
  • @AlokSave:但是否可以不使用向量,就像创建 macierz 数组一样?如果是这样,它如何用作论据?

标签: c++ arrays function pointers dynamic


【解决方案1】:

查看 shengy 在 this question 上的回答,了解将二维数组传递给函数的各种方法。

【讨论】:

    猜你喜欢
    • 2012-03-22
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2014-01-16
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多