0

我在指针世界中有点迷失 :-) 通过使用将数字传递给 readSystemVal 来读取值就像一个魅力,但现在我想使用 writeSystemVal 写入这些变量。

无法真正找到我应该做的事情:*systemVal 将地址保存到变量但我如何将我的值写入它?

你会这么好心看看吗?

(系统:AVR、eclipse、atmega644)

// User Changeable variables
uint8_t     MIDIchan1 = 0;      // midichannel  osc 1
uint8_t     MIDIchan2 = 1;      // midichannel  osc 2
uint8_t     MIDIchan3 = 2;      // midichannel  osc 3
uint8_t     pbRange = 12;       // pitchbend
uint8_t     omniModus = 0x00;   // 3 osc modus or 1 omni modus 
uint8_t     midiThru = 0x01;    // midiTrhu on/off
uint8_t     *systemValList[] = {&MIDIchan1, &MIDIchan2, &MIDIchan3, &pbRange, &omniModus, &midiThru};


//**************************************************
// readSystemVal
// DESCRIPTION:
//  Hele simpele note off routine
//**************************************************
uint8_t readSystemVal (uint8_t systemItem)
{
    uint8_t *systemVal = (uint8_t *)systemValList[(uint8_t)systemItem];
    uint8_t returnVal = *systemVal;

    return returnVal;
}

void writeSystemVal (uint8_t ctrlValue, uint8_t systemItem)
{
/*
    uint8_t *systemVal = (uint8_t *)systemValList[(uint8_t)systemItem];
    //uint8_t returnVal = *systemVal;
    // systemVal = ctrlValue;
*/
}
4

1 回答 1

4

不,systemVal(没有星号)持有地址。这就是指针,只是一个整数,其值是指针指向的地址。

您可以使用解引用运算符*来读取和写入指针指向的值。

示例,返回指针指向的值:

return *systemVal;

例如,设置指针指向的值:

*systemVal = ctrlValue;

顺便说一句,该readSystemVal功能可以缩短为:

uint8_t readSystemVal (uint8_t systemItem)
{
    return *systemValList[systemItem];
}

中间不需要额外的步骤。尤其不是类型转换,它将值转换为它们实际声明的类型。

于 2013-10-14T08:48:29.940 回答