所以在运行时我们不知道数组的大小(矩阵),我希望用户输入数组的元素(矩阵)。这是正确的方法吗?我还正确地返回指向数组的指针吗?
#define MAX_DIM 10
int main(void)
{
int done = 0;
int rows, cols;
float *dataMatrix;
while (!done)
{
// Prompt user to enter row and column dimensions of matrix (must be > 0)
do
{
printf("Enter row dimension (must be between 1 and %d): ", MAX_DIM);
scanf("%d", &rows);
} while(rows <= 0 || rows > MAX_DIM);
do
{
printf("Enter column dimension (must be between 1 and %d): ", MAX_DIM);
scanf("%d", &cols);
} while(cols <= 0 || cols > MAX_DIM);
dataMatrix = readMatrix(rows, cols);
if (dataMatrix == NULL)
{
printf ("Program terminated due to dynamic memory allocation failure\n");
return (0);
}
float *matrix(int numRows, int numCols)
{
int i=0;
float **m= NULL;
m=malloc(numRows*sizeof(float*));
if(m==NULL)
{
printf("error\n");
exit(1);
}
for(i=0;i<numRows;i++)
{
m[i]=malloc(numCols*sizeof(float));
}
if(m[i-1]==NULL)
{
printf("error\n");
exit(1);
}
printf("Enter values for the matrix: ");
scanf("%f",m[i]);
return m[i];
}
答案 0 :(得分:1)
这是正确的方法吗?
你正朝着正确的方向前进,但并未完全在那里。
我也正确地将指针返回到数组吗?
没有
您可以使用以下两种方法之一为矩阵分配内存。
分配numRows
个float*
个。对于每一行,分配numCols
的{{1}},然后返回指向float
数组的指针。这就是你尝试过的但你并没有做好一切。
仔细查看用于读取用户数据和float*s
语句的修改代码。
return
分配float **matrix(int numRows, int numCols)
{
int i=0;
float **m = malloc(numRows*sizeof(float*));
if(m == NULL)
{
printf("error\n");
exit(1);
}
for(i=0; i<numRows; i++)
{
m[i] = malloc(numCols*sizeof(float));
if(m[i] == NULL)
{
printf("error\n");
exit(1);
}
}
printf("Enter values for the matrix: ");
for (i = 0; i < numRows; ++i )
{
for (int j = 0; j < numCols; ++j)
{
scanf("%f", &m[i][j]);
}
}
return m;
}
的{{1}}个。将1D阵列视为2D数据的持有者。使用适当的偏移量将1D阵列视为2D阵列。返回指向numRows*numCols
s。
float