在脚本语言中,例如Perl和Python,我可以在运行时更改函数。我可以通过将指针更改为函数来在C中执行某些操作吗?
类似的东西:
void fun1() {
printf("fun1\n");
}
void fun2() {
printf("fun2\n");
}
int main() {
fun1 = &fun2;
fun1(); // print "fun2"
return 0;
}
答案 0 :(得分:6)
是;你可以,这是一个简单的程序,可以帮助你理解这个
#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;
}
➤ ./a.exe
fun1
fun2
答案 1 :(得分:6)
你不能改变fun1,但你可以声明一个函数指针(不是函数,只是指向函数的指针)。
void (*fun)();
fun = fun1;
fun(); /* calls fun1 */
fun = fun2;
fun(); /* calls fun2 */
您可能已经注意到没有必要明确地获取fun1 / fun2的地址,您可以省略运算符'&amp;'的地址。
答案 2 :(得分:6)
没有。你不能那个。
您可以将fun1视为该函数的固定入口点的占位符。
您正在寻找的语义是从fun1=&fun2;
点到每次调用fun1
会导致fun2
被调用。
fun1
是一个值而不是一个变量。语句中int x=1;
x
的变量与变量相同,1
是一个值。
您的代码没有比认为1=2;
能够编译更有意义的内容,从x=x+1;
开始,x
将导致fun1
增加2。
仅仅因为color=$(zenity --color-selection | sed 's/\(#\?..\)../\1/g')
是标识符并不意味着它是一个变量,更不用说可分配了。