如何使用指针读取nxn矩阵?

时间:2012-04-16 17:13:13

标签: c++ c

我是C ++的新手,我正在努力学习指针。 作为一个工作练习,我尝试使用指针指针读取nxn矩阵。 这是我到目前为止所尝试的,但scanf失败了。 我做错了什么?
稍后编辑:

int **matrix;
int i=0;
int j=0;
int li=0;
int dim;

printf("What is the dimmension:");
scanf("%d",&dim);
matrix=(int **)malloc(sizeof(int *) * dim);
for(li=0;li<dim;li++)
{
    matrix[li] = (int *)malloc(sizeof(int) * dim);
}
printf("Type the elements:\n");
for(i=0;i<dim;i++)
{
    for(j=0;j<dim;j++)
    {
        scanf("%d", matrix[i][j]);
    }
}

5 个答案:

答案 0 :(得分:2)

如果您使用的是C ++,最好这样做

matrix = new int*[dim];
for(int = 0; i < dim; ++i)
    matrix[i] = new int[dim];

// to read matrix
scanf("%d", matrix[i][j]);

答案 1 :(得分:1)

您有两个(半)主要选项。您可以单独分配每一行

matrix = malloc(dim * sizeof(int*));  // gives you dim int*
for(i = 0; i < dim; ++i)
{
    matrix[i] = malloc(dim * sizeof(int)); // row i gets dim int
}

或者你可以分配一个连续的块

int *array = malloc(dim*dim*sizeof(int));

并使用

访问该内容
array[i*dim + j];

半选项是使用打包内存布局,但有一个包装器可以使用matrix[i][j]访问它:

int **matrix = malloc(dim*sizeof(int*));
for(i = 0; i < dim; ++i)
{
    matrix[i] = array + i*dim;
}

(当然,在C ++中,您通常不会malloc,而是使用new和/或标准库提供的其他类型。)

答案 2 :(得分:0)

您应该能够像普通的二维数组matrix[i][j]一样访问它,然后scanf使用该位置

scanf("%d", &matrix[i][j]);

编辑你也需要自己分配指针:

matrix=(int **)malloc(sizeof(int *) * dim);
for(i = 0; i < dim; i++) {
    matrix[i] = (int *)malloc(sizeof(int) * dim);
}

此外,如果这是直的C,则不应该从malloc转换返回类型,因为C会自动升级它,并且强制转换可以隐藏错误。

答案 3 :(得分:0)

您已经分配了指针指针的顶级数组,但没有设置指向任何已分配内存的下一级指针。为每个指针矩阵[i]创建一个malloc循环,或者将每个指针设置为现有的已分配内存,然后scanf可以使用它。

答案 4 :(得分:0)

如果您正在尝试执行指针数组,其中每个指针指向一行,您实际上需要自己为每行指针。这是代码:

// forM * N(或N * N)

int **a;
a=malloc(M*sizeof(int *));
for(i=0;i<M;i++)
    a[i] = &aa[i][0];

使用该代码,您可以指定一个指向大型malloc的指针,然后将malloc的一大块分配给每一行的第一个元素!这允许你使用传统的2d数组a [0] [0],a [1] [1],ec来取消引用数组。 以下是解释此问题的最佳参考: http://www.eskimo.com/~scs/cclass/int/sx9b.html