c - C 语言 3d 数组
问题描述
我有作业,我必须定义一个函数: void initialize_hotel(char**** hotel, int n, int m); 我试图了解什么是四(*)以及如何分配内存,n 是行,m 是列。
解决方案
那个原型根本没有任何意义。
指向-...-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]) );
}
推荐阅读
- macos - 我还需要 Mac 来为 iOS 开发 react-native 应用程序吗?
- c - SDL2 无法在虚拟机中获取显示模式(没有可用的视频设备)
- hibernate - 在休眠中使用 SequenceGenerator 时强制 id 值
- php - 提交后如何留在页脚部分?#php
- c# - 无法将带有 [] 的索引应用于 JObject 类型的表达式
- laravel - PHP致命错误:允许的内存大小为1610612736字节已用尽
- azure - 在 Azure 解决方案中提供 App 服务安全性
- java - How to display a message on android screen first and only then execute a method?
- coredns - getting error unknown property 'protocol' when using forward plugin
- azure-ad-b2c - 从 Azure B2C 自定义策略调用安全 REST API 以嵌入声明