函数指针简述

1:函数指针的实质

a:函数指针的实质还是指针变量,不过指针指向的是函数。 

b:指针,函数指针,数组指针都是指针。只不过指向的内容不同。都占用4个字节。32位系统中都是4个字节

c:函数指针就是一个普通的指针变量。变量的类型是一个函数指针变量类型。它的值是某个函数的地址。

d:函数的实质是一段连续分布的代码,所以函数的第一句代码就是函数的地址。

e:C语言本身是强类型语言,编译器会进行严格的类型检查。(每一个变量都有自己变量类型)

f :函数名与数组名有所不同。最大区别是:

         函数名做右值,加不加&意义相同。数组名则不同。

void (*pFunc)(void);
//pFunc = func1; //左边是一个函数指针变量,右边是一个函数名
pFunc = &func1; // &func1和func1做右值时是一模一样的,没任何区别
pFunc (); //用函数指针来解引用以调用该函数

int *p;
int a[5];

p = a;//般配的,类型匹配的,所以编译器不会警告不会报错。
//p = &a; //类型不匹配,p是int *, &a是int (*)[5];(指针数组)
int (*p1)[5] ;
p1 = &a; // p1类型是int (*)[5],&a的类型也是int (*)[5]

g:假设我们有个函数是 :void func (void); char *strcpy(char *dest, const char *src);
对应的函数指针 :void (*p) (void); char *(*pFunc)(char *dest, const char *src)
类型是 :void (*) (void);

2:函数指针简单应用例子

#include <stdio.h>

int add(int a, int b);
int sub(int a, int b);
int multiply(int a, int b);
int divide(int a, int b);
// 定义了一个类型pFunc,这个函数指针类型指向一种特定参数列表和返回值的函数
typedef int (*pFunc)(int, int);
int main(void)
{
pFunc p1 = NULL;
char c = 0;
int a = 0, b = 0, result = 0;

printf("请输入要操作的2个整数:\n");
scanf("%d %d", &a, &b);

printf("请输入操作类型:+ | - | * | /\n");

do 
{
scanf("%c", &c);
}while (c == '\n');
switch (c)
{
case '+':
p1 = add; break;
case '-':
p1 = sub; break;
case '*':
p1 = multiply; break;
case '/':
p1 = divide; break;
default:
p1 = NULL; break;
}

result = p1(a, b);
printf("%d %c %d = %d.\n", a, c, b, result);
return 0;
}
int add(int a, int b){ return a + b;}
int sub(int a, int b){ return a - b;}
int multiply(int a, int b){return a * b;}
int divide(int a, int b){return a / b;}




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值