Tag: 函数指针

在C中对数组实现一个通用的“map”函数

我在数组上实现通用的“map”函数时遇到了困难。 我从以下草案开始: void MapArray(void * src, void * dest, void * (f)(void *), size_t n, size_t elem) { unsigned int i = 0, j = 0; void * temp = malloc(elem); for(i = 0; i<n, i++) { temp = (f)((char *) src) + i)); for(j = 0; j < elem; j++) { *(((char *) dest) […]

如何将指向成员函数的指针传递给C函数?

可能重复: 使用C ++类成员函数作为C回调函数 我正在使用C库(winpcap)编写面向对象的库。 我需要传递当网络数据包作为函数指针到达时调用的回调函数。 我想将一个成员函数指针传递给winpcap,以保持我的设计对象的方向,并允许不同的对象接收不同的数据包。 但是据我所知,成员函数具有不同的调用约定,因此不能传递给C函数。 有没有办法来解决这个问题。 我使用boost :: bind进行的实验(除了试验和错误之外我几乎无法使用)并不富有成效。 有没有办法改变成员函数的调用约定? 这是我现在使用的回调函数的定义以及它实际传递给winpcap的定义 void pcapCallback( byte* param, const struct pcap_pkthdr* header, const byte* pkt_data ); pcap_loop( adhandle, 0, pcapCallback, NULL ); pcap_loop只接受函数的名称(目前在全局范围内)。 这是函数指针参数的定义( pcap_loop的第3个参数)。 由于这是第三方代码,我无法真正改变这一点。 我必须有一个可以采用这种forms的成员函数: typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *, const u_char *); 据我所知,成员函数将使用thiscall,而c函数指针需要一个cdecl

调用函数指针时,星号是否可选?

我无法在任何地方找到答案。 我刚看完K&R,看到他们调用这样的函数指针: (*ptr)(arg1, arg2); 然而,我清楚地记得看到有人像这样使用它们: ptr(arg1, arg2); 但这可能是在C ++中。 规则怎么样? 它们在C和C ++上有区别吗?

转换为函数指针?

遇到过下面显示的代码行,我认为它可能是一个函数指针的转换,返回void并获取一个void指针,这是正确的吗? (void (*)(void *))SGENT_1_calc

指向常量函数的指针的含义是什么?

指针可以声明为指向可变(非常量)数据或指向常量数据的指针。 可以将指针定义为指向函数。 我的同事和我正在讨论使用带有指针的“const”,并且出现了关于const与函数指针一起使用的问题。 以下是一些问题: 指向常量函数的指针与指向非常量函数的指针的含义是什么? 函数可以是常量吗? 函数可以是非const(可变)吗? 传递函数指针的正确(安全)语法是什么? 编辑1:函数指针语法 typedef void (*Function_Pointer)(void); // Pointer to void function returning void. void function_a(Function_Pointer p_func); // Example 1. void function_b(const Function_Pointer p_func); // Example 2. void function_c(Function_Pointer const p_func); // Example 3. void function_d(const Function_Pointer const p_func); // Example 4. 上述声明是将函数指针视为指向内部类型的指针的示例。 数据,变量或存储器指针允许上述组合。 所以问题是:函数指针是否具有相同的组合以及指向const函数的指针(例如示例2)是什么意思?

C:如何为具有可变参数计数的函数使用单个函数指针数组?

这个问题几乎说明了一切。 我不确定如何做到这一点,并没有任何有效的东西。 这是一些示例函数: add(int x, int y) { return x+y; } 和, mean(int x1, int y1, int x2, int y2) { return (x1 + y1 + x2 + y2) / 4; } 到目前为止,我已尝试将typedef与两者一起使用,但我无法想象如何使某些东西指向其中一种类型: typedef int (*mathfunc2)(int x, int y); typedef int (*mathfunc4)(int x1, int y1, int x2, int y2); ????? func_table[2] = {add, mean};

如何通过指针在C中传递多个参数来调用函数?

我需要创建一个“函数调用者”函数:它接收一个generics函数指针( void * )和一个可变数量的参数作为参数,它必须调用此函数,传递参数,并返回一个指向返回值的generics指针。 但是,这个入口函数指针可能指向任何类型的函数(具有任何返回类型),甚至指向具有常量参数的函数。 它会是这样的: void * function_caller(void * function_pointer, …) { void * returning_value; // Call the function and get the returning value return returning_value; // this returning value will be properly casted outside } 这样,以下代码将起作用: int function1(int a, char b) { // … } void function2(float c) { // … } float […]

C中的“this”指针(不是C ++)

我试图在C中创建一个堆栈以获得乐趣,并想出了使用struct来表示堆栈的想法。 然后我为push()和pop()操作添加了结构的函数指针。 到目前为止看起来一切都很好,但是,对于push()和pop()函数的实现,我需要以某种方式引用*。 怎么能(可以吗?)完成? 这是我的结构 struct Stack { int *data; int current_size; int max_size; int (*push)(int); int (*pop)(); }; 以此为例推动 int push(int val) { if(current_size == max_size -1) return 0; data[current_size] = val; current_size++; return 1; } 可以想象,编译器不知道current_size是什么,因为它会期望像stack->current_size 。 这有可能以某种方式克服吗?

调用一个函数指针,其指定函数的参数少于指针类型

请考虑以下代码: #include typedef int (*test_func_t) (int, int, int); int print_integer (int a) { std::cout << "num: " << a << "\n"; return a; } int main (int argc, char * argv[]) { test_func_t func = (test_func_t) &print_integer; std::cout << "calling with 3 parameters func(5,7,9)\n"; func(5,7,9); return 0; } 如您所见,类型(test_func_t)被定义为具有3个int参数的函数。 函数指针(func)被赋予一个指向“print_integer”的指针,该指针只接收一个参数,然后用3个参数(5,7,9)调用函数指针。 此代码工作并生成“num:5”输出。 gdb disas输出(Intel语法) disas main […]

用于create_pthread()调用的cast成员函数

我想停止警告 server.cpp:823:警告:从’void *(ClientHandler :: )()’转换为’void ( )(void )’ 在电话中: pthread_create(th, NULL, (void* (*)(void*)) &ClientHandler::handle, (void *) clientHandler); 其中handle()是ClientHandler的成员函数: void* ClientHandler::handle(); 我很难从编译器中解密函数类型的消息。 问题是: 我应该更改handle()接口吗? 我可以摆脱整体铸造吗? 我应该改变演员吗? 到底是什么? 完全不同的东西?