C语言--------指向函数的指针
指向函数的指针:
1.函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用 来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。
定义的一般形式:函数的返回值类型 ( * 指针变量名)(形参1, 形参2, ...);
2.指向函数的指针的定义格式:
2.1普通指针的定义格式
数据类型 *指针变量名称
int *p;
2.2指向函数的指针的定义格式
void (*指针变量名) ();
void (*funtionP) ();
* : 代表是一个指针
funtionP : 代表指针变量的名称,
(*funtionP) : 代表将来用这个指针变量将来指向一个函数
void : 代表将来指向的函数没有返回值
() : 代表将来指向的函数没有参数
3.通过指向函数的指针间接调用函数的方式:
1. (*funtionP) (参数);
2. foundation (参数);
实例:
// main.c
// 指向函数的指针
//
// Created by apple--王迅 on 15/8/23.
// 指向函数的指针
//
// Created by apple--王迅 on 15/8/23.
// Copyright (c) 2015年 apple. All rights reserved.
/*
指向函数的指针:
定义格式
指向函数的指针的定义格式
void (*funtionP) (参数列表);
* : 代表是一个指针
funtionP : 代表指针变量的名称, 区分
(*funtionP) : 代表将来指向一个函数
void : 代表将来指向的函数没有返回值
() : 代表将来指向的函数没有参数
#include <stdio.h>
int sum(int a,int b){
return a+b;
}
int cha(int a,int b){
return a-b;
}
void (*funtionP) (参数列表);
* : 代表是一个指针
funtionP : 代表指针变量的名称, 区分
(*funtionP) : 代表将来指向一个函数
void : 代表将来指向的函数没有返回值
() : 代表将来指向的函数没有参数
#include <stdio.h>
int sum(int a,int b){
return a+b;
}
int cha(int a,int b){
return a-b;
}
int main(int argc, const char * argv[]) {
//定义一个返回值为int 参数为(int ,int)的 foundation指向函数的指针,这个指针变量只能用来指向函数(只能接受函数的地址),并且函数的返回值为int以及函数有两个整型形参
int (*foundation)(int ,int); //注意定义格式
//将要调用的函数sum的地址传给指针变量foundation,此时这个指向函数的指针foundation就指向了函数sum,
//函数名==函数的地址 跟数组一样,数组名==数组地址==数组首元素地址
foundation=sum; //注意:不能写成 foundation =sum()
//通过指向函数的指针,间接的调用函数
//1.间接调用函数调用方式1
//int result1 =foundation(10,20);
//2.间接调用函数方式2
int resut2 =(*foundation)(10,20);
printf("%d",resut2);
return 0;
}
10.指针为什么要分类型?
1. 指针在Mac系统64位的编译器中不管是几级指针或者是什么了下的指针都只占8个字节是不变的,如果是32位的话占4个字节,和编译环境有关的
2. 指针之所以分类型就只是我们在通过指针变量的时候,系统会根据我们定义的那个指针变量类型从他所指向的
那个内存空间开始取值多少个字节,如果指针类型是char,那木系统会根据char占用一位存储单元也就是8个字节开始从他所指向的那个存储单元取出一· 位,也即是8个字节,如果是int型,那木就访问所指向的那个存储单元的4位也就是32个字节,而long long 最多也就是8位最多就是64为
浙公网安备 33010602011771号