繁体   English   中英

指针数组Malloc(C编程)

[英]Pointer Array Malloc (C Programming)

我发现我不理解这一行。 它说

char (*storage)[15] = malloc(sizeof *storage * 8)

有人知道这是什么意思吗? 为什么我看到很多*

我不明白这是因为为什么他/她乘以8(看起来是这样),然后又宣布也是[15]

如果我错了纠正我。

char (*storage)[15] = malloc(sizeof *storage * 8)

它为大小为15 8字符数组分配内存。

对于所有*您问-

char (*storage)[15]              // pointer to array of 15 chars 

和这个 -

sizeof *storage * 8   // this is 8 times sizeof type to which storage points 

char (*storage)[15]char 15个元素的数组的指针。

sizeof *storage * 8storage点类型的大小的8倍。

char (*storage)[15] = malloc(sizeof *storage * 8);

动态分配一个8x15的char数组。 这大致类似于写作

char storage[8][15];

除了那个

  • 动态分配对象的生命周期一直持续到用free显式释放它为止,而自动分配对象的生命周期一直持续到程序退出该对象的封闭范围为止。
  • 动态分配对象的存储空间(通常)通常与自动分配对象的存储区不同。
  • 您可以根据需要扩展动态分配的数组的大小。 IOW,如果您意识到还需要两行,则可以编写
     size_t curRows = 8; char (*tmp)[15] = realloc( storage, sizeof *storage * (curRows + 2)); if ( tmp ) { storage = tmp; curRows += 2; } 
    您不能使用自动分配的数组来做到这一点。

动态分配8x15数组的另一种方法是这样的:

char **storage = malloc( sizeof *storage * 8 );
if ( storage )
{
  for ( size_t i = 0; i < 8; i++ )
  {
    storage[i] = malloc( sizeof *storage[i] * 15 );
  }
}

注意,所有三个版本都可以索引为storage[i][j]

last方法的主要优点是,如果您希望每行的长度可以不同。 主要缺点是行在内存中不一定会相邻,因此必须先free每个storage[i]然后才能free storage

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM