2015-09-25 99 views
1

我試圖定義一個函數指針數組,其中每個函數都包含一個參數int。我也想設置在數組聲明函數指針數組,傳遞數組中定義的值

所以我有一個TIMED_TASK結構,將容納函數指針和值,我想這個int參數的值傳遞

typedef struct 
{ 
    void (*proc)(int); 
    int delayMsec;  
} TIMED_TASK; 

然後,我有的TIMED_TASK就像這樣

static const TIMED_TASK attractSequence[] = 
{ 
    { LightsOn, 1000 }, 
    { LightsOff, 500 }, 
    { EndSequence, 0 } 
}; 

我想每個的那些功能它調用反過來,延遲值傳遞給每個功能的陣列。這是我期望我的語法錯誤的地方(我仍然在學C)。我貌似完全不

void loop() // It's an arduino project :) 
{ 
    attractSequence[sequence]; 
    sequence++; 
} 

void LightsOn(int pause) 
{ 
    // I do not hit this routine for some reason? 
    Serial.print("LIGHTS ON"); 
    Serial.print(pause); 
} 

void LightsOff(int pause) 
{ 
    Serial.print("LIGHTS OFF"); 
    Serial.print(pause); 
} 

這是完全有可能的,我在這裏採取了錯誤的方式打我LightsOn()常規,但我希望你能明白我想要的目的。任何建議非常歡迎!

+1

你確定這是直線上升C 2這看起來像是一種嵌入式方言,如arduino語言。 – Alex

+0

正確,這是一個arduino項目。但我相信語法應該與C相同? – PaulG

+0

不是,'Serial.print(pause)'是無效的c,並不是完全無效的,而是因爲它在你的代碼中似乎是。此外,你從來沒有通過指針調用函數,我期望它在發佈的代碼中被調用? –

回答

5

如果你想通過的attractSequence每個項目只有一次,你可以使用:

void loop() 
{ 
    int count = sizeof(attractSequence)/sizeof(attractSequence[0]); 
    for (int i = 0; i < count; ++i) 
    { 
    attractSequence[i].proc(attractSequence[i].delayMsec); 
    } 
} 
+0

太棒了!謝謝。我需要的語法是attractSequence [sequence] .proc(attractSequence [sequence] .delayMsec)。現在我明白了它的完美意義 – PaulG