我不能想象在函数调用中多个星号的实际使用: void foo(int a, char b) { } int main(void) { (**************foo)(45, 'c'); //or with pointer to function: void (*ptr)(int, char) = foo; (******ptr)(32, 'a'); } 为什么这个东西在C和C ++中都是允许的?
我有一个小问题 我试图用callocdynamic定义一个函数指针数组。 但是我不知道如何编写语法。 非常感谢。
通常我觉得需要编写返回函数指针的函数。 每当我这样做,我使用的基本格式是: typedef int (*function_type)(int,int); function_type getFunc() { function_type test; test /* = …*/; return test; } 但是,当处理大量的函数时,这会变得麻烦,所以我不想为每个函数声明一个typedef(或者为每个类的函数) 我可以删除typedef并声明在函数中返回的局部variables为: int (*test)(int a, int b); 使function体看起来像这样: { int (*test)(int a, int b); test /* = …*/; return test; } 但后来我不知道该为函数的返回types设置什么。 我努力了: int(*)(int,int) getFunc() { int (*test)(int a, int b); test /* = …*/; return test; } […]
class Foo { public: Foo() { do_something = &Foo::func_x; } int (Foo::*do_something)(int); // function pointer to class member function void setFunc(bool e) { do_something = e ? &Foo::func_x : &Foo::func_y; } private: int func_x(int m) { return m *= 5; } int func_y(int n) { return n *= 6; } }; int main() { Foo […]
在原始T1 (*)(T2) , std::function<T1(T2)>的优点是什么?
我想用成员函数指针做一些testing。 这段代码有什么问题? bigCat.*pcat(); 语句不编译。 class cat { public: void walk() { printf("cat is walking \n"); } }; int main(){ cat bigCat; void (cat::*pcat)(); pcat = &cat::walk; bigCat.*pcat(); }
我读了C中的函数指针。大家都说这会让我的程序运行缓慢。 这是真的吗? 我做了一个程序来检查它。 在这两种情况下我都得到了相同的结果。 (测量时间) 那么,使用函数指针是不是很好? 提前致谢。 为了回应一些人。 我说我在比较一个循环的时候“运行缓慢”。 喜欢这个: int end = 1000; int i = 0; while (i < end) { fp = func; fp (); } 当你执行这个,我得到了同样的时间,如果我执行这个。 while (i < end) { func (); } 所以我认为函数指针没有时间差别,也没有像很多人说的那样让程序运行缓慢。
考虑这个JavaScript代码: var bar = function () { alert("A"); } var foo = bar; bar = function () { alert("B"); }; foo(); 运行这个代码时,我得到“A”。 这是行为的JavaScript规范的一部分,我可以依靠它吗?
如何从C 函数的指针获取函数的名字? 编辑:真正的情况是:我在写一个Linux内核模块,我正在调用内核函数。 其中一些函数是指针,我想检查内核源代码中的那个函数的代码。 但是我不知道它指向哪个函数。 我认为可以这样做,因为当系统发生故障(内核恐慌)时,它会在屏幕上打印出当前具有函数名称的callstack。 但是,我想我错了…是吗?
我试图做一个函数,需要一个字符,然后返回一个函数的指针,取决于字符是什么。 我只是不知道如何使一个函数返回一个指向函数的指针。