首页 > 解决方案 > C 语言 3d 数组

问题描述

我有作业,我必须定义一个函数: void initialize_hotel(char**** hotel, int n, int m); 我试图了解什么是四(*)以及如何分配内存,n 是行,m 是列。

标签: cmultidimensional-array

解决方案


那个原型根本没有任何意义。

指向-...-to 指针的指针不能指向数组。指向指针的指针可以指向指针。在某些特定情况下,它可能是指针数组中的第一个元素......但总的来说这没有任何意义。

所以要么这是一个技巧问题,老师试图给你一个不可能的任务来演示如何不编写程序。或者,您的老师不称职,我们不要希望是这样。

有一个常见的误解,即指针对指针的事物以某种方式动态分配多维数组。在动态分配单个长度的字符串数组的情况下,achar**是有意义的。在所有其他情况下,指向指针的指针可能没有意义,尤其是当你在*它上面堆积更多时更是如此。如果我们想要一个字符串数组,每个字符串都有单独的长度,那将是一个char* [n][m]类型,它与char***.

请参阅正确分配多维数组。从那篇文章中,我们可以了解到分配 3D 数组的一种可能方法是:

void arr_alloc (size_t x, size_t y, size_t z, int(**aptr)[x][y][z])
{
  *aptr = malloc( sizeof(int[x][y][z]) ); // allocate a true 3D array
  assert(*aptr != NULL);
}

或者如果语法感觉太吓人,简单地说:

void* arr_alloc (int x, int y, int z)
{
  return malloc( sizeof(int[x][y][z]) ); 
}

或者在具有单独长度的字符串数组的情况下(不是我推荐使用的):

void* str_alloc (int x, int y)
{
  return malloc( sizeof(char*[x][y]) );
} 

推荐阅读