gpt4 book ai didi

c - 如何将二维数组发送到函数?

转载 作者:太空宇宙 更新时间:2023-11-04 04:30:49 25 4
gpt4 key购买 nike

我用这个创建了一个二维数组:

struct Cars (*ParkingLot)[FloorCount] = malloc(sizeof(struct Cars[FloorCount][10]));

我不知道这是否重要,但是 FloorCount 现在设置为 1,并且 struct Cars 是这样定义的:

    struct Cars
{
int ID;
char color[20];
char type[20];
};

无论如何,我试图在一个函数中使用这个数组,但我无法访问数组中的值。比如接下来的事情:

void CarIn (struct Cars *Lot[])
{
printf("%d", Lot[0][0].ID);
}
ParkingLot[0][0].ID=15;
CarIn(ParkingLot);

这不是我想做的,但这是我能想到的使用数组的最基本功能,它将帮助我完成其余的工作。

编辑:好吧,我已经设法使用该功能进行打印,我所需要的只是在 Lot[0][0].ID 之前添加 & ...我现在遇到的另一个问题是这个功能似乎根本不起作用,它总是崩溃:

void CarIn (struct Cars *Lot[],struct Cars New)
{
Lot[0][0]=New;
return;
}

最佳答案

首先,您在 ParkingLot 的分配声明中的尺寸有误。我假设您想要每层 10 辆汽车和任意数量的楼层,如果是这种情况,那么应该这样做:

struct Cars (*ParkingLot)[10] = malloc(FloorCount * sizeof *ParkingLot);

ParkingLot 是一个指向 10 个 Cars 数组的指针(不是 10 个指向 Cars 的指针;而是 10 个 Cars 按顺序)。 sizeof *ParkingLot 将计算保存那么多顺序 Cars 结构的内存需求,最后,乘以 FloorCount 将得到那么多楼层,这么多车。为了理智起见,您可以(并且可能应该)使用标准库中的数组分配器 calloc,尽管它不是严格需要的。它看起来像这样:

struct Cars (*ParkingLot)[10] = calloc(FloorCount, sizeof *ParkingLot);

有些人发现它更清晰,并且喜欢它对分配的内存进行零初始化的事实。


关于您的问题,要传递真正的数组数组(而不是指针数组),您的函数参数声明是不正确的。

这个:

void CarIn (struct Cars *Lot[])

声明了一个任意长度的 struct Cars * 数组,实际上上面的内容等同于:

void CarIn (struct Cars **Lot)

如果您的意图是传递真正的数组数组(这是您的分配确实要获取的数组),那么您两者都不想要。相反,你想要这样的东西:

void CarIn (struct Cars Lot[][10])

或者等效地,这个:

void CarIn (struct Cars (*Lot)[10])

要将真正的数组数组传递给函数,必须在声明中提供所有 维度,但最高级的维度除外。上面声明了 Cars 的 element-count-10 数组的任意长度数组。

注意:这也可以使用可变长度语法来完成,如果数组次级维度的大小是运行时生成的,但这似乎不是你的问题(然而)。现在,以上内容应该可以让您到达您想去的地方。

祝你好运。

关于c - 如何将二维数组发送到函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36513896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com