我对编程很陌生,所以我真的需要帮助。我需要使用一个函数来生成具有随机值的二维数组。这是我的代码:
#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;
}
但是我得到了上面提到的错误。问题出在哪儿?请帮帮我
答案 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)
randArr
是float *
,但您尝试在其中分配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;
}