如何创建对数组的引用的数组?

时间:2019-02-11 08:07:47

标签: arduino

我的代码在语法上遇到了麻烦。有点背景... 我的程序有一个时间表,它是24个字节的数组。每天有一个时间表,所以有7个阵列。

我希望有一个由7个元素组成的数组,用于存储对上述7个数组的引用。这样,通过调用schedules [1],我得到了schedule1 [24],也就是星期一。

// One schedule per day (0 = sunday)
byte schedule0[24];
byte schedule1[24];
byte schedule2[24];
byte schedule3[24];
byte schedule4[24];
byte schedule5[24];
byte schedule6[24];
byte * schedules[7] = {&schedule0, &schedule1};

问题出在最后一行,错误是“类型为“ byte(*)[24]”的值不能用于初始化类型为“ byte *”的实体”。

我尝试在星号/指针字符之前或之后插入[24],但没有运气。

请问大家有没有正确的语法可以做到这一点?

3 个答案:

答案 0 :(得分:1)

C++中,数组名称是指向数组中第一个元素的指针。因此,在您的情况下,schedule0是指向&schedule0[0]而不是&schedule0的指针。

您可以将最后一行更改为

byte * schedules[2] = {&schedule0[0], &schedule1[0]};byte * schedules[2] = {schedule0, schedule1};

这将创建一个指针数组,其中包含scheduleX数组的基址。

答案 1 :(得分:0)

简单来说,你做不到。

这是为什么的解释:

基本上,引用是现有变量的别名。这意味着,如果您对引用应用任何操作,它的行为就像您使用原始变量名一样。而且在引用处没有引用,在引用处也没有指针,引用不分配任何内存,因此没有什么可用于放置数组。

您可以做的是创建一个指针数组,它将起作用。

答案 2 :(得分:0)

  

我希望有一个由7个元素组成的数组,用于存储对上述7个数组的引用。这样,通过调用schedules [1],我得到了schedule1 [24],也就是星期一。

需要一种不同的方法来对几天进行索引。这可以使用二维数组和一些指针算法来完成。

为您的时间表声明一个二维数组:

byte schedulesArray[7][24];

声明指向每天日程表的指针:

byte *schedule0 = &schedulesArray[0][0];
byte *schedule1 = &schedulesArray[1][0];
byte *schedule2 = &schedulesArray[2][0];
byte *schedule3 = &schedulesArray[3][0];
byte *schedule4 = &schedulesArray[4][0];
byte *schedule5 = &schedulesArray[5][0];
byte *schedule6 = &schedulesArray[6][0];

声明一个指向二维数组第一个元素的指针:

byte *schedules = &schedulesArray[0][0];

所以,如果我们播种一些数据:

schedule0[0] = 1;

schedule1[0] = 11;
schedule1[1] = 12;

schedule2[0] = 21;
schedule2[1] = 22;

然后,您可以使用schedules指针跨天编制索引:

schedules[0];   // = 1
schedules[24];  // = 11
schedules[25];  // = 12
schedules[48];  // = 21
schedules[49];  // = 22

之所以可行,是因为多维数组被布置为连续的内存块。