【发布时间】:2011-11-03 00:37:49
【问题描述】:
为什么可以这样调用C/C++函数:
(&myAwesomefunction)(arg1,arg2,arg3...);
当然,获取函数的地址会给你一个指针/地址。据我了解,指针不能作为函数调用。到底发生了什么?
是不是说我可以像函数一样调用任意地址?
// Is this legal?
int x = 69;
(&x)(3,78,69.456,'c','o','n','d','o','m');
这意味着什么?
【问题讨论】:
-
我不会将一种语言称为“残破”的语言,并希望从足够了解该语言能够回答的人那里得到答案。阅读常见问题解答。
-
您可以将任何指针调用为具有强制转换的函数,但如果它不是有效的函数指针,则它是未定义的行为。
-
如果函数不是内存中的地址,你的印象是什么?
-
C 类型系统正是完美的因为它让你告诉编译器“我知道我在做什么,不要限制我。”如果你真的不知道自己在做什么,那你就完蛋了,但那是你的错。
-
类型为一种语言提供了大量有用的特性,当你进行原始转换或其他任何事情时,你不会完全放弃类型系统(由于你列出的原因,这通常是不受欢迎的),但您在该特定实例中覆盖它。此外,您可以在需要时完全覆盖类型系统的原因是因为它的类型完全是编译时概念。运行时没有类型信息与数据一起存储(这也是 C 语言如此之快的部分原因)。简而言之,如果您不喜欢或无法处理编写可移植程序集的复杂性,那么 C 不适合您。
标签: c++ c function pointers syntax