动态分配——用户在运行前不知道数组大小的情况下输入元素
Dynamic Allocation - user inputs elements without knowing the array size before runtime
所以在 运行 时我们不知道数组(矩阵)的大小,我希望用户输入数组(矩阵)的元素。这是正确的方法吗?我 return 指向数组的指针也正确吗?
#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];
}
is this the proper way to do it?
您正朝着正确的方向前进,但还不完全正确。
Also did i return the pointer to the array properly?
没有
您可以使用两种方法之一为矩阵分配内存。
分配 numRows
个 float*
数量。对于每一行,分配 numCols
个 float
,然后 return 一个指向 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;
}
分配 numRows*numCols
个,共 float
个。将一维数组视为二维数据的持有者。使用适当的偏移量将一维数组视为二维数组。 Return 指向 float
数组的指针。
float *matrix(int numRows, int numCols)
{
int i=0;
float *m = malloc(numRows*numCols*sizeof(float));
if(m==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)
{
int index = i*numCols+j;
scanf("%f", &m[index]);
}
}
return m;
}
所以在 运行 时我们不知道数组(矩阵)的大小,我希望用户输入数组(矩阵)的元素。这是正确的方法吗?我 return 指向数组的指针也正确吗?
#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];
}
is this the proper way to do it?
您正朝着正确的方向前进,但还不完全正确。
Also did i return the pointer to the array properly?
没有
您可以使用两种方法之一为矩阵分配内存。
分配
numRows
个float*
数量。对于每一行,分配numCols
个float
,然后 return 一个指向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; }
分配
numRows*numCols
个,共float
个。将一维数组视为二维数据的持有者。使用适当的偏移量将一维数组视为二维数组。 Return 指向float
数组的指针。float *matrix(int numRows, int numCols) { int i=0; float *m = malloc(numRows*numCols*sizeof(float)); if(m==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) { int index = i*numCols+j; scanf("%f", &m[index]); } } return m; }