访问c中的动态矩阵

时间:2015-12-26 10:21:01

标签: c matrix dynamic malloc

我在c中用malloc

创建一个动态整数矩阵(2X2)
int *ptr=malloc(sizeof(int)*4);

我成功访问了一个索引[(i * 2)+ j]的矩阵,而不是像[i] [j]这样的两个索引。 动态矩阵只能用一个索引访问,还是我错了? 感谢

2 个答案:

答案 0 :(得分:0)

您需要将矩阵声明为指向整数指针的指针。这是一个例子:

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

#define NEW_ARRAY(ptr, n) \
    { \
        (ptr) = malloc((n) * sizeof (ptr)[0]); \
        if ((ptr) == NULL) { \
            fprintf(stderr, "error: Memory exhausted\n"); \
            exit(EXIT_FAILURE); \
        } \
    }

int main(void)
{
    const int m = 2, n = 2;
    int **A;
    int i, j;

    /*allocate matrix*/
    NEW_ARRAY(A, m);
    for (i = 0; i < m; i++) {
        NEW_ARRAY(A[i], n);
    }

    /*initialize matrix*/
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            A[i][j] = i + j;
        }
    }

    /*print matrix*/
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            printf("%d ", A[i][j]);
        }
        putchar('\n');
    }

    return 0;
}

答案 1 :(得分:0)

  

动态矩阵是否只能使用一个索引访问,或者我错了   某处?

您可以使用两个索引,例如[i] [j] ,通过适当地定义它:

    int (*ptr)[2] = malloc(sizeof(int)*4);