2015-09-25 57 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