我的代码在语法上遇到了麻烦。有点背景... 我的程序有一个时间表,它是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],但没有运气。
请问大家有没有正确的语法可以做到这一点?
答案 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
之所以可行,是因为多维数组被布置为连续的内存块。