Tag: 函数指针

为什么函数指针和数据指针在C / C ++中不兼容?

我已经读过将函数指针转换为数据指针,反之亦然,在大多数平台上都能正常工作,但不保证能够正常工作。 为什么会这样? 两者都不应该只是简单地存入主存储器,因此兼容吗?

通过函数指针调用函数 – 是否取消引用指针? 有什么不同?

我试过–C和C++都很好。 我是函数指针的新手,这是一个简单的代码,让我感到惊讶: #include void sort( int* arr, const int N ); int main () { int arr1[] = { 1, 5, 2, 6, 2 }; int arr2[] = { 1, 5, 2, 6, 2 }; void (*sort_ptr)( int*, const int) = sort; sort_ptr( arr1, 5 ); (*sort_ptr)( arr2, 5 ); assert( arr1[0] == 1 && […]

如何在Win64上使用Varargs和C中的函数指针一起使用?

考虑以下C程序: #include #include typedef void (callptr)(); static void fixed(void *something, double val) { printf(“%f\n”, val); } static void dynamic(void *something, …) { va_list args; va_start(args, something); double arg = va_arg(args, double); printf(“%f\n”, arg); } int main() { double x = 1337.1337; callptr *dynamic_func = (callptr *) &dynamic; dynamic_func(NULL, x); callptr *fixed_func = (callptr *) &fixed; […]

Typedeffing一个函数(不是函数指针)

typedef void int_void(int); int_void是一个取整数并且不返回任何内容的函数。 我的问题是: 它可以“单独”使用,没有指针吗? 也就是说,是否可以将其用作简单的int_void而不是int_void* ? typedef void int_void(int); int_void test; 这段代码编译。 但是可以test某种方式使用或分配给某些东西(没有演员表)? /* Even this does not work (error: assignment of function) */ typedef void int_void(int); int_void test, test2; test = test2;

如何键入一个函数指针,该函数指针将自己类型的函数作为参数?

示例:一个函数,它接受一个函数(带有一个函数(那个……)和一个int)和一个int。 typedef void(*Func)(void (*)(void (*)(…), int), int); 它以递归方式爆炸(…) 。 是否有一个根本原因无法完成或是否有另一种语法? 在我看来,没有演员阵容应该是可能的。 我真的想传递一个调度表,但如果我可以通过这种类型,我可以想出来。

为什么我不能将函数指针强制转换为(void *)?

我有一个函数,它接受一个字符串,一个字符串数组和一个指针数组,并在字符串数组中查找字符串,并从指针数组返回相应的指针。 因为我将它用于几个不同的东西,指针数组被声明为(void *)的数组,并且调用者应该知道实际存在哪种指针(因此它返回的返回值是什么类型的指针) )。 但是当我传入一个函数指针数组时,我在使用-Wpedantic编译时会收到警告: 铛: test.c:40:8: warning: assigning to ‘voidfunc’ (aka ‘void (*)(void)’) from ‘void *’ converts between void pointer and function pointer [-Wpedantic] GCC: test.c:40:8: warning: ISO C forbids assignment between function pointer and ‘void *’ [-Wpedantic] fptr = find_ptr(“quux”, name_list, (void **)ptr_list, 这是一个测试文件,尽管警告确实正确打印“quux”: #include #include void foo(void) { puts(“foo”); } void bar(void) […]

C中的函数式编程(Currying)/类型问题

作为一个染成羊毛的function性程序员,我发现很难不把我最喜欢的范例变成我正在使用的语言。 在编写一些CI时,我想要讨论我的一个函数,然后传递部分应用的函数。 看完之后有没有办法在C里做cur? 并注意到http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html#Nested-Functions上的警告我提出: #include typedef int (*function) (int); function g (int a) { int f (int b) { return a+b; } return f; } int f1(function f){ return f(1);} int main () { printf (“(g(2))(1)=%d\n”,f1(g(2))); } 哪个按预期运行。 但是,我的原始程序使用double s,所以我想我只是改变了适当的类型,我会没事的: #include typedef double (*function) (double); function g (double a) { double f (double b) { […]

如何使用函数指针调用函数?

假设我有这三个function: bool A(); bool B(); bool C(); 如何使用函数指针有条件地调用其中一个函数,如何声明函数指针?

C中的function指针

如何在C中创建“函数指针”(和(例如)函数有参数)?

分配函数指针的正确方法

我对将函数指针赋给变量的正确语法感到困惑。 如果我有一个函数foo int foo(); 我正在将指向foo的指针分配给变量栏 void * bar; 如果我使用它似乎没关系 bar = foo; // or bar = &foo; 在我看来,这些中只有一个应该是正确的还是我错过了什么?