c-如何将2D数组发送到函数



我已经用这个创建了一个2D阵列:

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的数组的指针(不是指向Cars的10个指针;而是按顺序指向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的元素计数10阵列的任意长度阵列。

注意:如果次维度数组的大小调整是运行时生成的,那么这个也可以用可变长度语法来完成,但这似乎不是你的问题。目前,以上内容应该会让你达到你想要的目的。

祝你好运。

struct不创建2D数组,struct创建一个结构-一个统一不同数据类型并将其作为"统一体"存储在内存中的"模板"

通过int 2Darray[3][4] = {{0,1,2},{8,9,10,11}}; 创建2D阵列

结构的2D阵列由struct Cars cars2Darray[10][10]; 创建

看看这个http://www.tutorialspoint.com/cprogramming/c_multi_dimensional_arrays.htm

要将2D数组作为参数传递给函数,一种可能的方法是使用指向数组的0元素的指针,即2D_array[0](如果数组名为2D_array)。

在以下内容中,指针'ptr'指向int数组的0元素'1D_array'

int 1D_array[8]= { 1, 2, 4, 8, 16, 32, 64, 128 };
int *ptr; 
ptr = 1D_array;

ptr = 1D_array1D_array的第0个元素的地址存储在ptr中,因此ptr现在指向1D_array的第0元素

#include <stdio.h>
#include <stdlib.h>
int main(void) {
   int 1D_array[8]= { 1, 2, 4, 8, 16, 32, 64, 128 };
   int *ptr;
   int i;
   ptr = 1D_array;
   printf("The value, *ptr points to, is %dn", *ptr);
   printf("When applying *ptr+1 it points to %dn", *(ptr+1));
   printf("*(ptr+3) = %dn", *(ptr+3));
   printf("n all elements of 1D_array : n");
   for(i=0; i<8; i++)
      printf("element[%d]=%d n", i, *(ptr+i));
   return EXIT_SUCCESS;
}

由于ptr现在指向1D_array的第0个元素,因此可以使用它将数组传递给函数。

关于如何将2D数组传递给函数,有3种方法(2种使用指针)请参阅此将二维数组传递到函数的正确方法

相关内容

  • 没有找到相关文章

最新更新