2013-10-14 90 views
0

我在指針世界中有點迷路:-) 使用傳遞一個數來讀取值readSystemVal的工作原理就像是一個魅力,但現在我想寫給這些使用writeSystemVal的變量。丟失在pointerworld中,通過數組寫入到變量

無法真正找到我應該做的事情: * systemVal將地址保存在變量中,但是如何將其值寫入它?

你會好看嗎?

(系統:AVR,蝕,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; 
*/ 
} 
+1

你可能在尋找'* systemVal = ctrlValue;'? – Angew

+0

將事物鑄造成現有類型只會導致混亂和潛在的未來錯誤。 – molbdnilo

回答

4

否,systemVal(沒有星號)保持的地址。這就是指針,只是一個整數,其值是指針指向的地址。

您可以使用取消引用運算符*來讀寫指針指向的值。

實施例中,指針指向返回值:

return *systemVal; 

實施例中,設置值的指針指向:

*systemVal = ctrlValue; 

順便說,該readSystemVal函數可以是縮寫爲:

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

無需中間的額外步驟。尤其不是類型轉換,它將值賦予它們實際聲明的類型。

+0

謝謝你清理我的錯誤!我會放手一搏! – user2371490