我有家庭作业,我必须定义一个函数: void initialize_hotel(char*宾馆,int n,int m);我试图理解什么是4 (*)以及如何分配内存,n是行,m是列。
发布于 2021-05-25 21:49:14
这个原型根本没有任何意义。
指向指针的指针-...-to指针不能指向数组。指向指针的指针可以指向指针。在某些特定情况下,它可能是指针数组中的第一个元素...但总的来说,这没有任何意义。
所以要么这是一个刁钻的问题,老师试图给你一个不可能完成的任务,来演示如何不写程序。或者,你的老师不称职,让我们不要希望是这样的。
有一个常见的误解,即指针到指针的事情是如何动态分配多维数组的。对于具有动态分配的各个长度的字符串数组,char**是有意义的。在所有其他情况下,指向指针的指针可能没有意义,尤其是当您在它上面堆积更多的*时。如果我们想要一个字符串数组的数组,每个字符串都有单独的长度,那就是一个与char***无关的char* [n][m]类型。
参见Correctly allocating multi-dimensional arrays。从那篇文章中,我们可以了解到,分配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]) );
} 发布于 2021-05-25 21:30:43
#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');
}
}https://stackoverflow.com/questions/67688294
复制相似问题