我希望能够使用指针访问数组和变量。所以我创建了一个指向那些数组和变量的指针数组。但它似乎没有正确编译。我哪里出错了? (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};
感谢您的任何建议。
答案 0 :(得分:1)
你的第一个数组是一个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};
答案 1 :(得分:0)
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数据