如何使用指针读取 nxn 矩阵

How to read an nxn matrix using pointers?

本文关键字:nxn 矩阵 读取 指针 何使用      更新时间:2023-10-16

我是C++新手,我正在尝试学习指针。作为一项工作练习,我尝试使用指向指针的指针来读取 nxn 矩阵。这是我到目前为止尝试过的,但扫描失败了。我做错了什么?
后期编辑:

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

如果你正在使用C++最好这样做

matrix = new int*[dim];
for(int = 0; i < dim; ++i)
    matrix[i] = new int[dim];
// to read matrix
scanf("%d", matrix[i][j]);

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

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和/或其他类型。

您应该能够像常规 2D 数组一样访问它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会自动升级它,并且转换可以隐藏错误。

您已分配指针到指针的顶级数组,但未将下一级指针设置为任何已分配的内存。 做一个循环来为每个指针矩阵[i]malloc一个块,或者将每个指针设置为现有的分配内存,然后它可以被scanf使用。

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

/

/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