我得到错误的无效类型' float [int]'对于数组下标?

时间:2015-10-11 19:34:43

标签: c++ arrays

我对编程很陌生,所以我真的需要帮助。我需要使用一个函数来生成具有随机值的二维数组。这是我的代码:

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;
float randArray(int row, int column);

int main()
{    
    int r = 10, c = 8;
    float fckMmd = randArray(r,c);
    ///printing the array:
     for (int row=0; row<r; row++){
        for (int column=0; column<c; column++){
            cout << fckMmd[row][column] << " ";
        }
        cout << endl;
    } 
}


float randArray(int row, int column){
      srand(time(NULL));
      float *randArr;
      randArr = new int [row][column];
      for(int k=0; k<row; k++){
        for(int kk=0; kk<column; kk++){
            randArr[k][kk] = rand();
        }
      }
      return randArr;
}

但是我得到了上面提到的错误。问题出在哪儿?请帮帮我

3 个答案:

答案 0 :(得分:0)

首先:

float *randArr;

声明指向float的指针。然后你做

randArr = new int [row][column];

int的二维数组分配内存(不兼容的类型,从技术上讲,你为指向int[column]类型的数组的指针分配内存),因此出错。

您最好使用std::vector,或者,如果您想要手动管理的动态分配的2D数组,请改用float **randArr;并分配

float** randArr;
randArr = new float* [rows];
for(int i = 0; i < row; ++i)
    randArr[i] = new float[col];

float (*randArr)[col]; // pointer to array float[col]
randArr = new float[row][col];

其他问题:大多数情况下,srand必须在程序中仅使用一次。最好在main()中调用它,而不是将其隐藏到函数中,因为最终可能会多次调用该函数。

上一期:如果您想要速度,最好使用单个平面阵列(或std::vector)并从2D映射到1D,反之亦然,因为您的数据将保证是连续的并且你很少有缓存未命中。

答案 1 :(得分:0)

这是因为fckMmd只是一个浮点而不是一个指针或数组。

答案 2 :(得分:0)

randArrfloat *,但您尝试在其中分配2d数组。 2d数组与指针不同。您的函数也只返回1 float。我建议你使用矢量(也不要忘记内存)。此外,您应该只调用srand ONCE,而不是每次都调用,并注意rand()返回一个整数,而不是浮点值。

std::vector<std::vector<float>> randArray(int row, int column)
{
    std::vector<std::vector<float>> randArr(row);
    for (auto& v : randArr)
    {
        v.resize(column);
    }

    for(int k=0; k<row; k++)
    {
        for(int kk=0; kk<column; kk++)
        {
            randArr[k][kk] = static_cast<float>(rand());
        }
    }

    return randArr;
}
相关问题