首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言3d数组

C语言3d数组
EN

Stack Overflow用户
提问于 2021-05-25 20:49:51
回答 2查看 75关注 0票数 0

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

EN

回答 2

Stack Overflow用户

发布于 2021-05-25 21:49:14

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

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

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

有一个常见的误解,即指针到指针的事情是如何动态分配多维数组的。对于具有动态分配的各个长度的字符串数组,char**是有意义的。在所有其他情况下,指向指针的指针可能没有意义,尤其是当您在它上面堆积更多的*时。如果我们想要一个字符串数组的数组,每个字符串都有单独的长度,那就是一个与char***无关的char* [n][m]类型。

参见Correctly allocating multi-dimensional arrays。从那篇文章中,我们可以了解到,分配3D数组的一种可能方法是:

代码语言:javascript
复制
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);
}

或者,如果这种语法太吓人,可以简单地:

代码语言:javascript
复制
void* arr_alloc (int x, int y, int z)
{
  return malloc( sizeof(int[x][y][z]) ); 
}

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

代码语言:javascript
复制
void* str_alloc (int x, int y)
{
  return malloc( sizeof(char*[x][y]) );
} 
票数 3
EN

Stack Overflow用户

发布于 2021-05-25 21:30:43

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h> // Header require for malloc(), function for memory allocation

// char * == string, char ** == ROW, char *** == COLUMN, char **** == table
void initialize_hotel(char ****hotel, int n, int m)
{
    *hotel = (char ***)malloc(sizeof(char ***) * m);
    for (int i = 0; i < n; i++)
        (*hotel)[i] = (char **)malloc(sizeof(char **) * n);
}

#define ROW 3 //name, address, price
#define COLUMN 2 // {{"Hilton", "1st Avenue", "$50"} {"Citi", "2nd Bell", "$80"} }

int main() {
        char ***table;
        initialize_hotel(&table, ROW, COLUMN);

        table[0][0] = "Hilton";
        table[0][1] = "1st Avenue";
        table[0][2] = "$50";

        table[1][0] = "Citi";
        table[1][1] = "2nd Bell";
        table[1][2] = "$80";

        for(int i = 0; i < COLUMN; i++){
            for(int ii = 0; ii < ROW; ii++){
                if(ii == 0)
                    printf("Name: ");
                if(ii == 1)
                    printf("Address: ");
                if(ii == 2)
                    printf("Price: ");
                printf("%s\n", table[i][ii]);
            }
            putchar('\n');
        }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67688294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档