如何创建二维数组,其尺寸由用户指定? (在C中)

时间:2014-10-07 16:54:04

标签: c arrays 2d

这是我的尝试。我不完全确定我对指针的操纵。也许这就是为什么我错了,也许还有其他一些案例。我想从用户那里获取尺寸并创建一个方形矩阵,对其元素进行一些操作,并将原始和结果显示给用户。上次我通过创建一个100x100数组,并指定每行的结尾和常量的行结束来完成此操作。然后我将所有元素打印到此常量。但是为4x4矩阵创建100x100阵列似乎并不正确。我可以创建一个更小的数组,但这似乎不是解决问题的正确方法。在C中是否有办法创建一个完全符合用户指定大小的二维数组(它将是一个方形数组)。感谢

#include <stdio.h>
#include <stdlib.h>

double * createMatrix(int dimentions);
void drawMatrix(double * matrix);

int main(void)
{
    int n, i, j;
    system("cls");
    system("color 70");
    system("pause");

    puts("Enter the matrix's dimension");
    scanf("%i", &n);
    double * pmatrix = createMatrix(n);

    for (i = 0; i < n; ++j)
        for (j = 0; j < n; ++j)
        {
            printf("A%i%i: ", i + 1, j + 1);
            scanf("%lf", pmatrix[i][j]);
            getchar();
        }

    for (i = 0; i < n; ++i)
    {
        putchar('\n');
        for (j = 0; j < n; ++j)
            printf(" %lf ", &pmatrix[i][j]);
    }

    system("color 08");
    return 0;
}

double * createMatrix(int n)
{
    const int N = n;
    const int N1 = N;
    double matrix[N][N];
    double * pmatrix = matrix;
    return pmatrix;
}

2 个答案:

答案 0 :(得分:1)

您可以直接创建矩阵;你不需要一个功能。替换代码

double * pmatrix = createMatrix(n);

通过声明二维数组的常规方式:

double matrix[n][n];

答案 1 :(得分:0)

使用指针执行此操作的另一种方法。

#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
    double **pmatrix;
    int rowsize, colsize, i, j;

    printf("Enter the number of rows: ");
    scanf("%d",&rowsize);
    printf("Enter the number of columns: ");
    scanf("%d",&colsize);

    //Allocate memory for 2D array
    pmatrix = malloc(rowsize*sizeof(double*));
    for(i=0;i<rowsize;i++)
    {
        pmatrix[i] = malloc(colsize*sizeof(int));
    }

    //Accepting the values
    for(i=0;i<rowsize;i++)
    {
        for(j=0;j<colsize;j++)
        {
            printf("A %i %i: ", i + 1, j + 1);
            scanf("%lf",&pmatrix[i][j]);
        }
    }

    //Printing the values
    for(i=0;i<rowsize;i++)
    {
        for(j=0;j<colsize;j++)
        {
            printf("%lf\t",pmatrix[i][j]);
        }
        printf("\n");
    }

    //Free the memory
    for(i=0;i<rowsize;i++)
        free(pmatrix[i]);
    free(pmatrix);

    return 0;
}