Tag: 函数指针

为什么我可以通过带有太多参数的指针调用函数?

说我有这个function: int func2() { printf(“func2\n”); return 0; } 现在我声明一个指针: int (*fp)(double); 这应该指向一个带有double参数并返回int的函数。 func2没有任何参数,但是当我写的时候: fp = func2; fp(2); ( 2只是一个任意数字),func2`被正确调用。 这是为什么? 我为函数指针声明的参数数量没有意义吗?

将实例方法作为函数指针传递给C库

我正在编写一个使用C库的Objective-C应用程序。 我目前面临的问题是C库有一个结构,其中某些字段是稍后用作回调的函数指针。 如何将Objective-C实例方法转换为函数指针并将其传递给库?

如何获取调用函数的名称?

我正在使用gnu工具链。 我怎样才能在运行时找到函数的调用者? 即例如函数B()被许多函数使用函数指针调用。 现在,每当B被调用时,我想打印调用者名称。 我需要这个来调试某个问题。

使用C中的函数指针重新启动计算机

当我遇到一个在执行时重新启动计算机的程序时,我正在学习C语言中的函数指针。 void (*f) (void); f=(void (*)(void) MK_FP(0xFFFF,0x0000); f(); (void(*)(void))部分不在提供的原始文本中,我不得不进行此添加以获取要编译的代码。 这是如何运作的? 非常感谢你。

如何在C中实现“私有/受限”function?

在C采访中我被问到一个非常有趣的问题:如何以一种只能从特定的g()函数调用它的方式实现函数f()。 如果g()以外的函数试图调用f(),则会导致编译器错误。 起初,我虽然可以使用函数指针完成,但我可以在运行时接近阻塞调用。 但我无法想到编译时策略。 我甚至不知道使用ansi C是否可行。 有谁有想法吗?

如何在C中声明一个常量函数指针数组?

我需要声明一个指向函数的指针数组,如下所示: extern void function1(void); extern void function2(void); … void (*MESSAGE_HANDLERS[])(void) = { function1, function2, … }; 但是,我希望将数组声明为常量 – 数组中的数据和指向数据的指针。 不幸的是,我不记得在哪里放置const关键字。 我假设在这种情况下,实际指针MESSAGE_HANDLERS已经是常量,因为它被声明为数组。 另一方面,如果声明如图所示,那么数组中的函数指针是否可以在运行时更改?

解释qsort库中使用的函数的typedef

我正在使用qsort库函数对结构元素数组进行排序,而在Internet上搜索时我找到了一个资源: INFO:使用C qsort()函数 @support.microsoft 对结构进行排序 。 我知道qsort函数需要通用指针进行类型转换。 但是我无法得到这一行: typedef int (*compfn) (const void*, const void*); 已经宣布的,以及随后的电话: qsort((void *) &array, // Beginning address of array 10, // Number of elements in array sizeof(struct animal), // Size of each element (compfn)compare // Pointer to compare function ); typedef是如何表现的,我的意思是我们究竟有什么类型的intdeffed int (*compfn)或int (compfn) ? 如果是前者,那么不应该调用(*compfn) ?

在c中编写函数指针

我最近在读代码,发现函数指针写成: int (*fn_pointer ( this_args ))( this_args ) 我经常会遇到这样的函数指针: return_type (*fn_pointer ) (arguments); 这里讨论类似的事情: // this is a function called functionFactory which receives parameter n // and returns a pointer to another function which receives two ints // and it returns another int int (*functionFactory(int n))(int, int) { printf(“Got parameter %d”, n); int (*functionPtr)(int,int) = […]

在Swift中向C函数表示NULL函数指针

考虑一下私有但尚未记录的Cocoa C函数_NSLogCStringFunction()和_NSSetLogCStringFunction() 。 _NSLogCStringFunction()返回一个函数指针,指向NSLog()幕后的Objective-C运行时使用的C函数, _NSSetLogCStringFunction()允许开发人员指定自己的C函数进行日志记录。 有关这两个函数的更多信息可以在此Stack Overflow问题和此WebObjects支持文章中找到 。 在C中,我可以传入NULL函数指针到_NSSetLogCStringFunction() : extern void _NSSetLogCStringFunction(void(*)(const char*, unsigned, BOOL)); _NSSetLogCStringFunction(NULL); // valid 但是,当我尝试在纯Swift中执行此操作时,我遇到了一些问题: /// Represents the C function signature used under-the-hood by NSLog typealias NSLogCStringFunc = (UnsafePointer, UInt32, Bool) -> Void /// Sets the C function used by NSLog @_silgen_name(“_NSSetLogCStringFunction”) func _NSSetLogCStringFunction(_: NSLogCStringFunc) -> Void _NSSetLogCStringFunction(nil) // Error: […]

增加函数指针

我刚刚学习了函数指针(指向存储函数机器代码的地址的指针)。 这让我想到机器代码以及它如何存储在内存中。 机器代码是否连续存储在内存中,以便可以“手动”增加指针,直到它指向下一个/上一个函数? 这是调试器的作用吗? 他让我“看到”程序计数器指向机器代码的位置? 结论:可以用函数指针编程一个原始调试器吗? 我理解这是对的,还是我离开了?