user-0 提问: 函数指针的参数问题

回复:
user: user-1
content: 仅供参考#include <stdio.h> double A[300][100]; double valuex[300]; double valuey[300]; int i; double fun00(double x,double y) {return x  +   y  ;}; double fun01(double x,double y) {return x*x+ 3*y  ;}; double fun02(double x,double y) {return x  + 2*y*x;}; //...  fun03(double x,double y) {return ...+...   ;}; //... //...  fun98(double x,double y) {return ...+...   ;}; double fun99(double x,double y) {return x/2+20*y  ;}; double (*funNN[100])(double,double)={     fun00,     fun01,     fun02, //  fun03, //  ... //  fun98,     fun99, }; int main() {     double x,y;     int f,FN;      for (i=0;i<300;i++) {         valuex[i]=(double)i;         valuey[i]=(double)i;     }     FN=3;     for (i=0;i<300;i++) {          x=valuex[i];          y=valuey[i];          for (f=0;f<FN;f++) A[i][f]=funNN[f](x,y);     }     for (i=0;i<3;i++) {         for (f=0;f<FN;f++) printf("%lg ",A[i][f]);         printf("\n");     }     return 0; } //0 0 0 //2 4 3 //4 10 10

user: user-2
content: p_fnct 是一个函数指针      (*OS_TMR_CALLBACK_PTR)(void *p_tmr, void *p_arg);  这个定义已经说明p_fnct 它是接受二个参数的。  假如你说的p_tmr->CallbackPtr这个函数指针只接受一个参数，那么  p_fnct = p_tmr->CallbackPtr;  这个赋值肯定会出错的，不可能将一参数的函数指针赋值给二个参数的函数指针.  所以，你先确定你没有看错说明？

user: user-3
content: 引用 4 楼 u012986806 的回复:[quote=引用 2 楼 lovesmiles 的回复:] p_fnct 是一个函数指针      (*OS_TMR_CALLBACK_PTR)(void *p_tmr, void *p_arg);  这个定义已经说明p_fnct 它是接受二个参数的。  假如你说的p_tmr->CallbackPtr这个函数指针只接受一个参数，那么  p_fnct = p_tmr->CallbackPtr;  这个赋值肯定会出错的，不可能将一参数的函数指针赋值给二个参数的函数指针.  所以，你先确定你没有看错说明？  p_tmr一个是形参一个是实际存在的，两者我不是说得很清楚，不是同一个，只不过用的名字相同而已，麻烦你再帮忙看下帖子看我的问题怎么理解？谢谢[/quote] 这个是a,那个是a,这个又是a，到底是哪个a？你理解的了么？直接上代码不是更好么？你这样断章取义，谁能知道你到时又跑出个啥东西来……

user: user-0
content: 引用 1 楼 u010030181 的回复:[quote=引用 楼主 u012986806 的回复:]  2.获取回调函数并执行。有两个参数，一个是我们回调函数的参数，另一个是p_tmr。 先获取p_fnct = p_tmr->CallbackPtr;这句话有问题吧？ 应该是p_arg = p_tmr->CallbackPtr吧？[/quote] 看4楼

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:仅供参考#include <stdio.h> double A[300][100]; double valuex[300]; double valuey[300]; int i; double fun00(double x,double y) {return x  +   y  ;}; double fun01(double x,double y) {return x*x+ 3*y  ;}; double fun02(double x,double y) {return x  + 2*y*x;}; //...  fun03(double x,double y) {return ...+...   ;}; //... //...  fun98(double x,double y) {return ...+...   ;}; double fun99(double x,double y) {return x/2+20*y  ;}; double (*funNN[100])(double,double)={     fun00,     fun01,     fun02, //  fun03, //  ... //  fun98,     fun99, }; int main() {     double x,y;     int f,FN;      for (i=0;i<300;i++) {         valuex[i]=(double)i;         valuey[i]=(double)i;     }     FN=3;     for (i=0;i<300;i++) {          x=valuex[i];          y=valuey[i];          for (f=0;f<FN;f++) A[i][f]=funNN[f](x,y);     }     for (i=0;i<3;i++) {         for (f=0;f<FN;f++) printf("%lg ",A[i][f]);         printf("\n");     }     return 0; } //0 0 0 //2 4 3 //4 10 10 不懂，可以直接教我下吗？

user: user-0
content: 引用 2 楼 lovesmiles 的回复:p_fnct 是一个函数指针      (*OS_TMR_CALLBACK_PTR)(void *p_tmr, void *p_arg);  这个定义已经说明p_fnct 它是接受二个参数的。  假如你说的p_tmr->CallbackPtr这个函数指针只接受一个参数，那么  p_fnct = p_tmr->CallbackPtr;  这个赋值肯定会出错的，不可能将一参数的函数指针赋值给二个参数的函数指针.  所以，你先确定你没有看错说明？  p_tmr一个是形参一个是实际存在的，两者我不是说得很清楚，不是同一个，只不过用的名字相同而已，麻烦你再帮忙看下帖子看我的问题怎么理解？谢谢

user: user-3
content: 引用 楼主 u012986806 的回复:2.获取回调函数并执行。有两个参数，一个是我们回调函数的参数，另一个是p_tmr。 先获取p_fnct = p_tmr->CallbackPtr;这句话有问题吧？ 应该是p_arg = p_tmr->CallbackPtr吧？