-1

我最近参加了一次面试,他们要求我编写一个程序来为二维数组(i=3 和 j=2)动态分配内存

4

3 回答 3

9
int *a = (int*)malloc(i*j*sizeof(int));

你可以a[k][l]得到a[k*i+l];

于 2013-06-16T15:09:36.687 回答
2

你们中有些人会讨厌这个,但它是我的最爱。主要优点是它可以通过单个解除分配,free并且仍然允许通过A[r][c].

#include <stdlib.h>

int main(void)
{
        int num_row = 3, num_col = 2, r;
        int ** A;

        A = malloc(num_row*(sizeof(*A)+num_col*sizeof(**A)));

        for (r = 0; r < num_row; r++)
        {
                A[r] = (int*)(A+num_row)+r*num_col;
        }

        /* Accessing element at row r and column c is through:
         *
         *      A[r][c].
         */

        free(A);

        return 0;
}
于 2013-06-16T17:08:33.937 回答
1
int i = 3;
int j = 2;

int** a = malloc(i * sizeof(int*));

for (unsigned int k = 0; k < i; k++) {
    a[k] = malloc(j * sizeof(int));
}

// Now you can use it.
a[0][0] = 0;
a[2][1] = 3;

在提出问题之前,您没有尝试过搜索 SO 问题数据库吗?

于 2013-06-16T15:13:07.610 回答