function指针 – 自动解除引用
可能重复:
如何解除引用函数指针?
void myprint(char* x) { printf("%s\n", x); } int main() { char* s = "hello"; void (*test)(char*); void (*test2)(char*); test = myprint; test2 = &myprint; test(s); (*test)(s); test2(s); (*test2)(s); }
任何人都可以向我解释为什么以上所有代码都有效? “你好”打印四次。 通过应用函数指针,它是否隐式解除了? 基本上我想知道函数指针是如何实际存储的,因为上面的内容有点令人困惑。
这只是C的一个怪癖。没有其他原因,但C标准只是说取消引用或获取函数的地址只是计算指向该函数的指针,并且取消引用函数指针只是计算回函数指针。
这种行为(因此显然)与一元&
和*
运算符对正常变量的工作方式非常不同。
所以,
test2 = myprint; test2 = &myprint; test2 = *myprint; test2 = **********myprint;
所有只是做完全相同,给你一个指向myprint
的函数指针
同样的,
test2(s); (*test2)(s); (***********test2)(s);
同样,调用存储在test2
的函数指针。 因为C说它确实如此。