指针列表出错



我希望能够使用指针访问数组和变量。所以我制作了一个指向这些数组和变量的指针数组。但它似乎编译不正确。我哪里错了?(c++、atmel、avrstudio(

volatile uint8_t    lfo1Clock = 0;
volatile uint8_t    lfo2Clock = 0;
volatile uint8_t    lfo3Clock = 0;
volatile uint8_t    lfo4Clock = 0;
volatile uint8_t    lfo5Clock = 0;
volatile uint8_t    lfo6Clock = 0;
uint8_t     lfo1[5]={4,0,0,0,0};
uint8_t     lfo2[5]={4,0,0,0,0};
uint8_t     lfo3[5]={4,0,0,0,0};
uint8_t     lfo4[5]={4,0,0,0,0};
uint8_t     lfo5[5]={4,0,0,0,0};
uint8_t     lfo6[5]={4,0,0,0,0};
uint16_t    *lfoList [] = {lfo1,lfo2,lfo3,lfo4,lfo5,lfo6};
uint16_t    *lfoClockList [] = {lfo1Clock,lfo2Clock,lfo3Clock,lfo4Clock,lfo5Clock,lfo6Clock};

谢谢你的建议。

您的第一个数组是uint16_t指针的数组,但它指向的是uint8_t数组。应该是这样的:

uint8_t    *lfoList [] = {lfo1,lfo2,lfo3,lfo4,lfo5,lfo6};

第二个数组也是错误类型的指针数组,但它也包含简单的uint8_t实例,即使类型正确,这些实例也无法工作。

如果它只是一个uint8_t实例的数组,我怀疑您想要的是:

uint8_t    lfoClockList [] = {lfo1Clock,lfo2Clock,lfo3Clock,lfo4Clock,lfo5Clock,lfo6Clock};

如果您确实需要第二个数组是uint8_t指针的数组,那么您需要获取每个项的地址。我认为您需要在数组定义中使用volatile才能使类型兼容。

volatile uint8_t    *lfoClockList [] = {&lfo1Clock,&lfo2Clock,&lfo3Clock,&lfo4Clock,&lfo5Clock,&lfo6Clock};
volatile int    lfo1Clock = 0;
int lfo1[5]={4,0,0,0,0};
int (*lfoList[5])[] = {&lfo1}; //   array of pointers to array of five integers
volatile int *lfoClockList [] = {&lfo1Clock}; 

注意:您正在使用uint16_t*指针来推断uint8_t数据

最新更新