- 此问题在此处已有答案**:
Does Function pointer make the program slow?(8个答案)
20小时前关门了。
在C++中你可以有方法/类函数,但在C中这是不可能的。然而,对于一些人来说,在C中使用构造函数,然后在结构中为函数指针分配函数地址是很常见的。例如:
#include <stdio.h>
void func_wave()
{
printf("Wave\n");
}
void func_handshake()
{
printf("Handshake\n");
}
typedef struct {
void (*wave)();
void (*handshake)();
}Greet;
Greet initGreet()
{
Greet var = {.wave = func_wave, .handshake = func_handshake};
return var;
}
int main()
{
Greet greet_instance = initGreet();
greet_instance.wave();
greet_instance.handshake();
return 0;
}
对我来说,这类似于C++ OOP,除了它需要一些额外的工作。
我的问题是:这比使用方法/成员函数慢吗?
1条答案
按热度按时间kpbpu0081#
这比使用方法/成员函数慢吗?
这取决于你的使用情况。你浪费了函数指针的存储空间,但是通常它很慢。
函数指针占用多少空间?
这取决于机器的字长。使用
sizeof()
运算符为您的机器查找。例如,它是否像int指针一样,有一个固定的大小来存储地址?
请参见this answer。
如果它确实是这样工作的,这是否意味着函数指针的大小都是相同的,或者它取决于函数的返回类型?
函数指针的大小相同,但根据标准不能等于
void *
。函数指针的类型取决于返回类型,而不是其大小。