C 我可以更改指针';s函数?
在脚本语言(如Perl和Python)中,我可以在运行时更改函数。我可以在C中通过改变指向函数的指针来做些什么 比如:C 我可以更改指针';s函数?,c,function,pointers,C,Function,Pointers,在脚本语言(如Perl和Python)中,我可以在运行时更改函数。我可以在C中通过改变指向函数的指针来做些什么 比如: void fun1() { printf("fun1\n"); } void fun2() { printf("fun2\n"); } int main() { fun1 = &fun2; fun1(); // print "fun2" return 0; } 对,;你可以,这是一个简单的程序,它将帮助你理解这一点 #in
void fun1() {
printf("fun1\n");
}
void fun2() {
printf("fun2\n");
}
int main() {
fun1 = &fun2;
fun1(); // print "fun2"
return 0;
}
对,;你可以,这是一个简单的程序,它将帮助你理解这一点
#include <stdio.h>
void fun1() {
printf("fun1\n");
}
void fun2() {
printf("fun2\n");
}
int main() {
void (*fun)() = &fun1;
fun(); // print "fun1"
fun = &fun2;
fun(); // print "fun2"
return 0;
}
不能更改fun1,但可以声明函数指针(不是函数,只是指向函数的指针)
正如您可能已经注意到的那样,没有必要明确地使用fun1/fun2的地址,您可以省略运算符的地址。否。您不能这样做 可以将fun1视为该函数的固定入口点的占位符
void (*fun)();
fun = fun1;
fun(); /* calls fun1 */
fun = fun2;
fun(); /* calls fun2 */
您要查找的语义是fromfun1=&fun2每次调用fun1
时的code>点会导致调用fun2
fun1
是一个值而不是变量。在语句intx=1中采用相同的方式
x
是一个变量,1
是一个值
你的代码没有比思考1=2更有意义
将编译并从该点开始x=x+1
将导致x
增加2
仅仅因为fun1
是一个标识符并不意味着它是一个变量,更不用说可赋值了。为什么不运行它并找出答案呢?您需要使用函数指针。这是一个示例。您能告诉我们您实际要解决的根本问题吗?fun1=&fun2代码>。您需要的不止这些。:-)然后从@酷佬读评论,然后搜索C函数指针。不需要<代码>和代码>。<代码>和<代码>不需要。@ ALK我知道,但是:A)它不伤害B)C++中需要“&”,为什么不明确地写它?
void (*fun)();
fun = fun1;
fun(); /* calls fun1 */
fun = fun2;
fun(); /* calls fun2 */