我正在努力跑,但我不能。也许它与指针有关, 我已经失去了期望。
#include <iostream>
using namespace std;
float createMatrix( int N )
{
int i,j;
float **matrix;
matrix = new float*[N];
if (matrix == NULL)
{
free(matrix);
return 0;
}
for (i=0; i<N; i++)
matrix[i] = new float[N];
for(i=0; i<N;i++)
for(j=0; j<N;j++)
matrix[i][j] = rand();
return **matrix;
}
void printMatrix (float **matrix)
{
int N = sizeof(matrix)/sizeof(float);
for(int i=0; i<N;i++)
{
for(int j=0; j<N;j++)
std::cout << (matrix)[i][j];
std:: cout << std::endl;
}
}
int main(int argc, const char * argv[]) {
int N=0;
std::cout << "Hello! Please, write any number for a size of the matrix\n";
std::cin >> N;
float m = createMatrix(N);
printMatrix(m); // error
return 0;
}
错误:没有匹配函数来编译'printMatrix' 请帮我!
答案 0 :(得分:2)
你必须从这个函数返回指向float的指针。但你现在只返回第一个值。
float** createMatrix( int N )
{
int i,j;
float **matrix;
matrix = new float*[N];
if (matrix == NULL)
{
free(matrix);
return 0;
}
for (i=0; i<N; i++)
matrix[i] = new float[N];
for(i=0; i<N;i++)
for(j=0; j<N;j++)
matrix[i][j] = rand() % 5; // not just rand(), in this case you become numbers in range [0, max int)
return matrix;
}
然后也存储你的矩阵。应存储指针,而不是第一个值。
float **m = createMatrix(N);
下一行将始终为您提供1.这是因为matrix
是一个指针,所有指针都有4个字节的大小。所以你有4/8 == 1。
int N = sizeof(matrix)/sizeof(float);
如果是原始dyn数组,我们需要将大小作为参数传递。
void printMatrix(float **matrix, int N) { /* do work */ }
最后你调用这个函数。
printMatrix(m, N);
但是在C ++中你应该使用std
并且不关心所有这些指针,看起来实际上很糟糕。 std::vector
这对我们有用。
编辑1: 正如在注释中所纠正的那样,并非所有指针都有4个字节的大小。在64位系统中,它有8个。
编辑2: 我们不应该忘记释放记忆:
for (int i = 0; i < N; ++i) {
delete m[i];
}
delete[] m;