vtable and vptr

Function Pointer

定义形式:返回类型 (类名称::*函数成员名称)(参数类型,参数类型,参数类型,….);

1、函数指针变量跟普通的指针一样在32位系统下大小都为4。但是函数指针常量的大小为1.

2、函数指针变量和函数指针常量存储在内存的不同位置。

3、为负值的函数指针变量(全局)的值为0。

深入理解C语言函数指针 - windlaughing - 博客园 (cnblogs.com)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <stdlib.h>

int fun1()
{
printf("this is fun1 call\n");
return 1;
}

void fun2(int k, char c)
{
printf("this is fun2 call:%d %c\n", k, c);
}

int main()
{
int (*pfun1)() = NULL;
void (*pfun2)(int, char) = NULL;
int a,b;
pfun1 = fun1; //第一种赋值方法
a = pfun1(); //第一种调用方法(推荐)
printf("%d\n",a);
b = (*pfun1)();//第二种调用方法
printf("%d\n",b);
pfun2 = &fun2;//第二种赋值方法(推荐,因为和其他数据指针赋值方法一致)
pfun2(1,'a');
(*pfun2)(2,'b');
return 0;
}

函数指针数组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>

float add(float a,float b){return a+b;}
float minu(float a,float b){return a-b;}

int main()
{
//定义一个函数指针数组,大小为2
//里面存放float (*)(float, float)类型的指针
float (*pfunArry[2])(float, float) = {&add, &minu};
double k = pfunArry[0](3.33,2.22);// 调用
printf("%f\n", k);
k = pfunArry[1](3.33,2.22);
printf("%f\n", k);
return 0;
}
  • Copyrights © 2018-2022 Haojia Zhu
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信