动态分配 - 用户输入元素,在运行时不知道数组大小

时间:2016-07-02 03:50:47

标签: c arrays dynamic-allocation

所以在运行时我们不知道数组的大小(矩阵),我希望用户输入数组的元素(矩阵)。这是正确的方法吗?我还正确地返回指向数组的指针吗?

#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];
}

1 个答案:

答案 0 :(得分:1)

  

这是正确的方法吗?

你正朝着正确的方向前进,但并未完全在那里。

  

我也正确地将指针返回到数组吗?

没有

您可以使用以下两种方法之一为矩阵分配内存。

  1. 分配numRowsfloat*个。对于每一行,分配numCols的{​​{1}},然后返回指向float数组的指针。这就是你尝试过的但你并没有做好一切。

    仔细查看用于读取用户数据和float*s语句的修改代码。

    return
  2. 分配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