为什么以及如何取消引用函数指针只是“什么都不做”? 这就是我所说的: #include<stdio.h> void hello() { printf("hello"); } int main(void) { (*****hello)(); } 从这里发表评论: 函数指针解引用就好了,但是得到的函数指示符会立即转换回函数指针 从这里的答案: 解除引用(以您认为的方式)函数的指针意味着:访问一个CODE内存,因为它将是一个DATA内存。 函数指针不能被这样解除引用。 相反,它被称为。 我会用“呼叫”并排使用名称“取消引用”。 没关系。 无论如何:C被devise为使得函数名称标识符以及variables保持函数的指针与代码存储器的地址相同。 而且它允许通过在标识符或variables上使用call()语法跳转到该内存。 函数指针的解引用究竟如何工作?
我试图存储在一个std::tuple不同数量的值,这将被用作参数调用一个函数指针匹配存储的types的参数。 我创build了一个简化的例子来展示我正在努力解决的问题: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << b << ":" << c << std::endl; } template <typename …Args> struct save_it_for_later { std::tuple<Args…> params; void (*func)(Args…); void delayed_dispatch() { // How can I "unpack" params to call func? func(std::get<0>(params), std::get<1>(params), std::get<2>(params)); // But […]
我最近在C语言中使用函数指针 因此,继续回答你自己的问题的传统,我决定对那些需要快速进入主题的人做一个基本的小结。
比方说,我有一个函数接受一个void (*)(void*)函数指针作为回调使用: void do_stuff(void (*callback_fp)(void*), void* callback_arg); 现在,如果我有这样的功能: void my_callback_function(struct my_struct* arg); 我可以安全地做这个吗? do_stuff((void (*)(void*)) &my_callback_function, NULL); 我已经看过这个问题 ,我已经看过一些C标准,你可以把它们转换成“兼容的函数指针”,但是我找不到“兼容的函数指针”是什么意思的定义。
是否有可能传递一个lambda函数作为函数指针? 如果是这样,我必须做错误的东西,因为我得到一个编译错误。 考虑下面的例子 using DecisionFn = bool(*)(); class Decide { public: Decide(DecisionFn dec) : _dec{dec} {} private: DecisionFn _dec; }; int main() { int x = 5; Decide greaterThanThree{ [x](){ return x > 3; } }; return 0; } 当我尝试编译这个 ,我得到以下编译错误: In function 'int main()': 17:31: error: the value of 'x' is not usable in […]
我想建立一个函数指针作为一个类的成员,是一个指向另一个函数在同一个类的指针。 我这样做的原因很复杂。 在这个例子中,我想输出为“1” class A { public: int f(); int (*x)(); } int A::f() { return 1; } int main() { A a; ax = af; printf("%d\n",ax()) } 但是编译失败了。 为什么?