标签: function-pointers

Python函数指针

我有一个函数名存储在一个变量中,如下所示:

myvar = 'mypackage.mymodule.myfunction'
Run Code Online (Sandbox Code Playgroud)

而我现在想要像这样打电话给我

myvar(parameter1, parameter2)
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最简单方法是什么?

python function-pointers

69
推荐指数
5
解决办法
10万
查看次数

复杂的C声明

我刚刚在互联网上查看了一些代码,发现了这个:

float * (*(*foo())[SIZE][SIZE])()
Run Code Online (Sandbox Code Playgroud)

我如何阅读此声明?是否有一套特定的规则来阅读这些复杂的声明?

c c++ function-pointers declaration

69
推荐指数
3
解决办法
3157
查看次数

如何将类成员函数作为回调传递?

我正在使用一个API,要求我将函数指针作为回调传递.我正在尝试从我的类中使用此API,但是我遇到了编译错误.

这是我从构造函数中做的:

m_cRedundencyManager->Init(this->RedundencyManagerCallBack);
Run Code Online (Sandbox Code Playgroud)

这不编译 - 我收到以下错误:

错误8错误C3867:'CLoggersInfra :: RedundencyManagerCallBack':函数调用缺少参数列表; 使用'&CLoggersInfra :: RedundencyManagerCallBack'创建指向成员的指针

我尝试使用这个建议&CLoggersInfra::RedundencyManagerCallBack- 对我不起作用.

对此有何建议/解释?

我正在使用VS2008.

谢谢!!

c++ function-pointers callback c++03

66
推荐指数
4
解决办法
10万
查看次数

如何解除引用函数指针?

为什么以及如何解除引用函数指针只是"什么都不做"?

这就是我所说的:

#include<stdio.h>

void hello() { printf("hello"); }

int main(void) { 
    (*****hello)(); 
}
Run Code Online (Sandbox Code Playgroud)

来自这里的评论:

函数指针解除引用就好了,但生成的函数指示符会立即转换回函数指针


这里的答案:

解除引用(以你认为的方式)函数的指针意味着:访问CODE内存,因为它将是一个DATA内存.

不应该以这种方式取消引用函数指针.相反,它被称为.

我会使用"dereference"这个名字与"call"并排使用.没关系.

无论如何:C的设计方式是函数名称标识符和变量保持函数的指针都是相同的:地址到CODE内存.它允许通过在标识符或变量上使用call()语法来跳转到该内存.


如何准确地不提领一个函数指针的工作?

c c++ pointers function-pointers

66
推荐指数
2
解决办法
3万
查看次数

如何使函数返回指向函数的指针?(C++)

我正在尝试创建一个带字符的函数,然后根据字符的内容返回一个指向函数的指针.我只是不确定如何使函数返回指向函数的指针.

c++ function-pointers return-value

64
推荐指数
7
解决办法
6万
查看次数

什么 ((void (*)())buf)(); 意思?

我正在解决 picoCTF 上的二进制开发挑战,并遇到了这段代码:

((void (*)())buf)();
Run Code Online (Sandbox Code Playgroud)

哪里buf是字符数组。

我解决了挑战,但似乎无法理解它到底在做什么。我看着这个线程,但我无法理解。

什么((void (*)())buf)();意思?

c pointers function-pointers function

59
推荐指数
4
解决办法
8510
查看次数

仿函数实际上比函数指针更快吗?

根据Scott Meyers的说法,C++在C上闪耀的一个领域是函数对象比函数指针更快.他说这是因为函数对象是内联的,这会提高速度.

我有两个问题:

  1. 我们如何验证函数对象实际上是内联的?我们能否在实践中验证这一点?

  2. 函数对象的内联是否依赖于我们使用的编译器,还是所有编译器的行为都是这样的?

c++ function-pointers inlining function-object

58
推荐指数
2
解决办法
4478
查看次数

如何从C中的函数指针获取函数的名称?

如何从C中的函数指针获取函数的名称?

编辑:真实情况是:我正在编写一个Linux内核模块,我正在调用内核函数.其中一些函数是指针,我想检查内核源代码中该函数的代码.但我不知道它指向哪个功能.我认为可以这样做,因为当系统出现故障(内核崩溃)时,它会在屏幕上打印出具有函数名称的当前callstack.但是,我想我错了......是吗?

c function-pointers linux-kernel

56
推荐指数
4
解决办法
6万
查看次数

如何通过成员函数指针调用?

我正在尝试使用成员函数指针进行一些测试.这段代码有什么问题?该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)

c++ function-pointers

56
推荐指数
2
解决办法
5万
查看次数

返回函数指针类型

我经常发现需要编写返回函数指针的函数.每当我这样做,我使用的基本格式是:

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 syntax types function-pointers

54
推荐指数
2
解决办法
4万
查看次数