C 我可以更改指针';s函数?

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

在脚本语言(如Perl和Python)中,我可以在运行时更改函数。我可以在C中通过改变指向函数的指针来做些什么

比如:

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 */
您要查找的语义是from
fun1=&fun2fun1
时的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 */