标题:怎样用函数指针 指向一个静态函数
取消只看楼主
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
结帖率:62.07%
已结贴  问题点数:2 回复次数:11 
怎样用函数指针 指向一个静态函数
1c.c
static void task_0(char a)
{
printf("%d\n",a);
}

void change_fun(void (*fun)(char a),static void (*function)(char a))
{
   fun=function;
}
//main.c
//static void (*fp)(char);
void (*fp)(char);//已修改成
int main (void)
{
  change_fun(fp,task_0(6));
  fp(33);//这里调用就出问题了 如果把static修饰符去掉之后就可以了 不知道是哪个语法出现问题了

}




[ 本帖最后由 duzhiming 于 2013-4-3 14:12 编辑 ]
搜索更多相关主题的帖子: void static function 
2013-04-03 13:12
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
得分:0 
回复 2楼 rjsp
最后那句 我试过了
在如果不在主函数里面使用的实参的话就错误的
taskchange(fp,task_0(33));
你有QQ么 加我一个
当然 是在1c.c文件中申明的 static函数
2013-04-03 14:02
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
得分:0 
回复 5楼 fanpengpeng
起初的时候 我是这样申明的
在main.c中
void (*fun)(char a);
后来发现有问题 在1c.c中的函数调用之后就释放掉了 所以想加上内存修饰符static 在1c.c中加了两次 没成功
于是乎就自己想象了 在main.c中 使用static 来修饰这个函数指针变量- -;
我应该吧问题写的稍微详细一点好了 急了 省略了一些 把主要的写上了0 0
抱歉哦
2013-04-03 14:08
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
得分:0 
回复 7楼 fanpengpeng
我想用指针再次调用
没明白为什么在
void change_fun(void (*fun)(char a),static void (*function)(char a))
{
   fun=function;
}
这个函数里 fun指针为什么名优初始化呢?
2013-04-03 14:28
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
得分:0 
回复 9楼 fanpengpeng
在main.c中 用函数指针这个可以的
我把函数函数指针作为参数 在别的函数去初始化就不行了
void change_fun(void (*fun)(char a),static void (*function)(char a))
{
   fun=function;
}
想在这个函数里实现 fun的初始化 在main.c中调用

我之前是把 函数写在main.c中的 直接赋值  如 实现function之后在main.c中 fun=function然后用函数指针调用用的 然后就可以fun(xx);
2013-04-03 14:40
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
得分:0 
回复 2楼 rjsp

taskchange(fp,task_0(33));在VC下运行过的
task_0函数被解释为函数指针 我想能不能连参数一起传递过去 在VC试了一次 还可以   虽然还不是很理解C的参数传递是传递参数的副本
这样写可以用就先这样呗 等理解了 就好说了
2013-04-03 14:55
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
得分:0 
回复 2楼 rjsp
那我怎样才可以在下面这个函数中实现 将fun函数指针指向 function这个函数呢
在函数中实现
void change_fun(void (*fun)(char a),static void (*function)(char a))
{
   fun=function;
}
2013-04-03 15:00
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
得分:0 
回复 2楼 rjsp
void task_0(char a) 既然是static的,那你就不可能在main.c中引用
为什么?
2013-04-03 16:24
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
得分:0 
回复 13楼 fanpengpeng
我就想在一个函数里实现 函数指针指向另一个函数  然后我来操作这个指针就可以了 不想去调用函数 比较麻烦啊
fun=function;//函数名被解释成函数指针

void change_fun(void (*fun)(char a), void (function)(char a)) 是不是应该这样写0 0



[ 本帖最后由 duzhiming 于 2013-4-3 16:36 编辑 ]
2013-04-03 16:27
duzhiming
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2012-2-13
得分:0 
回复 17楼 lz1091914999
谢谢大家了 绕出来了 考虑不周全
static 持有静态存储器同样还有文件作用域  没有深刻理解
谢谢大家的帮助 不胜感激
2013-04-03 22:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-402957-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.076494 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved