我有一个函数名存储在一个变量中,如下所示:
myvar = 'mypackage.mymodule.myfunction'
Run Code Online (Sandbox Code Playgroud)
而我现在想要像这样打电话给我
myvar(parameter1, parameter2)
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最简单方法是什么?
我刚刚在互联网上查看了一些代码,发现了这个:
float * (*(*foo())[SIZE][SIZE])()
Run Code Online (Sandbox Code Playgroud)
我如何阅读此声明?是否有一套特定的规则来阅读这些复杂的声明?
我正在使用一个API,要求我将函数指针作为回调传递.我正在尝试从我的类中使用此API,但是我遇到了编译错误.
这是我从构造函数中做的:
m_cRedundencyManager->Init(this->RedundencyManagerCallBack);
Run Code Online (Sandbox Code Playgroud)
这不编译 - 我收到以下错误:
错误8错误C3867:'CLoggersInfra :: RedundencyManagerCallBack':函数调用缺少参数列表; 使用'&CLoggersInfra :: RedundencyManagerCallBack'创建指向成员的指针
我尝试使用这个建议&CLoggersInfra::RedundencyManagerCallBack- 对我不起作用.
对此有何建议/解释?
我正在使用VS2008.
谢谢!!
为什么以及如何解除引用函数指针只是"什么都不做"?
这就是我所说的:
#include<stdio.h>
void hello() { printf("hello"); }
int main(void) {
(*****hello)();
}
Run Code Online (Sandbox Code Playgroud)
来自这里的评论:
函数指针解除引用就好了,但生成的函数指示符会立即转换回函数指针
从这里的答案:
解除引用(以你认为的方式)函数的指针意味着:访问CODE内存,因为它将是一个DATA内存.
不应该以这种方式取消引用函数指针.相反,它被称为.
我会使用"dereference"这个名字与"call"并排使用.没关系.
无论如何:C的设计方式是函数名称标识符和变量保持函数的指针都是相同的:地址到CODE内存.它允许通过在标识符或变量上使用call()语法来跳转到该内存.
如何准确地不提领一个函数指针的工作?
我正在尝试创建一个带字符的函数,然后根据字符的内容返回一个指向函数的指针.我只是不确定如何使函数返回指向函数的指针.
我正在解决 picoCTF 上的二进制开发挑战,并遇到了这段代码:
((void (*)())buf)();
Run Code Online (Sandbox Code Playgroud)
哪里buf是字符数组。
我解决了挑战,但似乎无法理解它到底在做什么。我看着这个线程,但我无法理解。
什么((void (*)())buf)();意思?
根据Scott Meyers的说法,C++在C上闪耀的一个领域是函数对象比函数指针更快.他说这是因为函数对象是内联的,这会提高速度.
我有两个问题:
我们如何验证函数对象实际上是内联的?我们能否在实践中验证这一点?
函数对象的内联是否依赖于我们使用的编译器,还是所有编译器的行为都是这样的?
如何从C中的函数指针获取函数的名称?
编辑:真实情况是:我正在编写一个Linux内核模块,我正在调用内核函数.其中一些函数是指针,我想检查内核源代码中该函数的代码.但我不知道它指向哪个功能.我认为可以这样做,因为当系统出现故障(内核崩溃)时,它会在屏幕上打印出具有函数名称的当前callstack.但是,我想我错了......是吗?
我正在尝试使用成员函数指针进行一些测试.这段代码有什么问题?该bigCat.*pcat();声明无法编译.
class cat {
public:
void walk() {
printf("cat is walking \n");
}
};
int main(){
cat bigCat;
void (cat::*pcat)();
pcat = &cat::walk;
bigCat.*pcat();
}
Run Code Online (Sandbox Code Playgroud) 我经常发现需要编写返回函数指针的函数.每当我这样做,我使用的基本格式是:
typedef int (*function_type)(int,int);
function_type getFunc()
{
function_type test;
test /* = ...*/;
return test;
}
Run Code Online (Sandbox Code Playgroud)
但是,在处理大量函数时,这会很麻烦,所以我不想为每个函数声明一个typedef(或者对于每个函数类)
我可以删除typedef并声明函数中返回的局部变量:
int (*test)(int a, int b);使函数体看起来像这样:
{
int (*test)(int a, int b);
test /* = ...*/;
return test;
}
Run Code Online (Sandbox Code Playgroud)
但后来我不知道该函数的返回类型设置了什么.我试过了:
int(*)(int,int) getFunc()
{
int (*test)(int a, int b);
test /* = ...*/;
return test;
}
Run Code Online (Sandbox Code Playgroud)
但是报告语法错误.如何在不声明函数指针的typedef的情况下声明此类函数的返回类型.它甚至可能吗?另请注意,我知道为每个函数声明typedef似乎更干净,但是,我非常小心地将我的代码构造成尽可能干净且易于遵循.我想消除typedef的原因是它们通常只用于声明检索函数,因此在代码中看起来是多余的.
c++ ×6
c ×5
pointers ×2
c++03 ×1
callback ×1
declaration ×1
function ×1
inlining ×1
linux-kernel ×1
python ×1
return-value ×1
syntax ×1
types ×1