gpt4 book ai didi

C——函数指针数组

转载 作者:行者123 更新时间:2023-12-02 21:28:39 25 4
gpt4 key购买 nike

我正在使用 C 并希望用指向各种函数的指针填充数组。我想使用一个函数来传递我想要放入数组中的函数的地址。这就是我正在尝试做的事情,但没有成功。编译器对原型(prototype)和 registerTask 函数定义中的“task *ptr”减速大喊大叫。我看到很多带有函数指针的数组示例,但没有一个首先通过函数参数传递函数地址,然后更新数组。欢迎任何建议。

typedef void (*task)(void);
task TaskArray[32];

// Prototypes
void taskA(void);
void taskB(void);
void registerTask(task *ptr);

// This is the problem function definition
void registerTask(task *ptr) {

TaskArray[TaskIndex] = ptr;
++TaskIndex;

}

// Some example functions definitions
void taskA(void) { }
void taskB(void) { }

int TaskIndex = 0;

main {

registerTask(&taskA); // place taskA pointer in array
registerTask(&taskB); // place taskB pointer in array

...later on...

TaskIndex = value; // Set the Task Array function Index
(*TaskArray[TaskIndex]); // call the function

}

最佳答案

task 一个函数指针。因此,registerTask 不需要采用 task *ptr 参数(这将是一个函数指针),只需采用一个 task ptr 即可。

此外,您调用该函数的语法不正确;您需要左括号和右括号,就像调用常规 ol' 函数一样。

最后,您不需要在要获取其地址的函数名称前面使用&符号 - 函数名称就足够了。而且,调用函数指针时不需要取消引用它。

typedef void (*task)(void);
task TaskArray[32];

// Prototypes
void taskA(void);
void taskB(void);
void registerTask(task taskPtr);

void registerTask(task taskPtr) {

TaskArray[TaskIndex] = taskPtr;
++TaskIndex;

}

// Some example functions definitions
void taskA(void) { }
void taskB(void) { }

int TaskIndex = 0;

main {

registerTask(taskA); // place taskA pointer in array
registerTask(taskB); // place taskB pointer in array

//...later on...

TaskIndex = value; // Set the Task Array function Index
TaskArray[TaskIndex](); // call the function

}

关于C——函数指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22850927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com