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


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("%dn", Map[2][3]);                                /* <--- works        */
printf("%dn", *(Map+2*Rbn_Col+3));                       /* <--- doesn't work */
  • 我应该在第五行添加(char*),为什么?

  • 为什么第二个printf不工作,而第一个是预期的?

使用第一个malloc创建一个32个指针的连续数组。在for语句中,你给这些指针赋了一个新值,现在它们引用了另一个内存。因此,如果使用Map+3,则不会引用第一行-第三列,而是引用第三行。

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

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

现在可以连续访问:

*(Map + row * Rbn_Col + column)

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

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

相关内容

  • 没有找到相关文章

最新更新