关于从二维动态数组中检索值

时间:2014-06-02 06:48:15

标签: c arrays multidimensional-array

const int Rbn_Row = 24, Rbn_Col = 32;

Map = (char**)malloc(Rbn_Col * sizeof(char*));
for (int Cnt = 0; Cnt < Rbn_Col; Cnt++)
    *(Map + Cnt) = (char*)malloc(Rbn_Row * sizeof(char)); /* <--- line 5       */

Map[2][3]=99;
printf("%d\n", Map[2][3]);                                /* <--- works        */
printf("%d\n", *(Map+2*Rbn_Col+3));                       /* <--- doesn't work */
  • 我应该在第五行添加(char*)吗?为什么?

  • 为什么第二个printf没有工作而第一个按预期工作?

2 个答案:

答案 0 :(得分:3)

使用第一个malloc,您可以创建一个32位指针的连续数组。在for为这些指针分配了一个新值时,现在它们引用了另一个内存。因此,如果您使用Map + 3,则不会引用第一行第三列,但它引用第三行。

如果您需要连续的内存,您还可以创建一个简单的1维数组:

Map = malloc(Rbn_Row * Rbn_Col * sizeof(char));

现在您可以连续访问:

*(Map + row * Rbn_Col + column)

答案 1 :(得分:0)

您错误地假设对malloc的32次调用返回连续的内存。是什么让你这么想的? 如果您想要连续的内存,则必须使用单个malloc

分配数组
char *Map;
Map = malloc (Rbn_Row * Rbn_Col * sizeof *Map);