c语言的函数内存分配及指针函数的用法
2014-04-12 10:11
316 查看
程序中定义了一个函数,在编译时,编译系统会为函数代码分配一段存储空间,这段存储空间的起始地址称为这个函数的指针。关于系统为函数分配内存的情况,度娘的答案如下:当源码被编译成二进制文件后,其中的变量,函数的虚拟地址,也就是内存空间中的地址就已确定,在运行时,操作系统为其分配物理内存并添加虚拟地址到物理地址的映射。 一个进程(运行的程序)可分为若干段:代码段、数据段、堆栈段等,其中函数所操作的空间(也就是局部变量的空间)就位于堆栈段,所谓函数分配内存大小,实际就是堆栈段指针的变化而已。 函数指针例子如下:
#include<stdio.h> int main() { int max(int ,int); int (*p)(int ,int); int a,b,c; p=max; scanf("%d,%d",&a,&b); c=(*p)(a,b); return 0; } int max(int x,int y) { return x>y?x:y;; }由例子可见,指向函数的指针变量定义方式为:类型名(*指针变量)(函数参数表列);需要注意的是:1、指向函数的指针变量只能指向在定义时指定的类型的函数,如*p与max函数类型都为int 2、要用指针调用函数,应先使指针变量指向该函数,如p=max; 3、在给函数指针变量赋值时,只需给出函数名不必给出参数 4、指向函数的指针变量不能进行算术运算,如p++,p+n等均不合法 5、用函数指针变量调用函数时,只需将(*p)代替函数名即可,如c=(*p)(a,b);使用函数指针变量的好处:用函数名调用函数,则只能调用所指定的一个函数,而通过指针变量调用函数比较灵活,可根据不同情况先后调用不同函数例子如下:
#include<stdio.h> int main() { int max(int ,int); int min(int ,int); int (*p)(int ,int); int a,b,c,n; scanf("%d,%d",&a,&b); printf("please input 1 or 2:"); scanf("%d",&n); if(n==1) p=max; else if(n==2) p=min; c=(*p)(a,b); return 0; } int max(int x,int y) { return x>y?x:y;; } int min(int x,int y) { return x>y?y:x; }
相关文章推荐
- C语言编程中分配内存空间的相关函数
- 内存分配函数用法小结
- c语言常用内存分配函数详解
- C语言三个内存分配函数比较,malloc calloc realloc
- C语言中分配内存的函数
- 黑马程序员——C语言——常见内存分配函数和构造类型
- C语言一些常用内存分配函数
- C语言:函数堆内存分配问题剖析
- C语言:使用realloc()函数重新分配内存
- 内存分配函数用法小结
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- C语言calloc()函数:分配内存空间并初始化
- C语言calloc()函数:分配内存空间并初始化
- C语言03 - 函数指针、内存分配、字符串使用
- C语言之内存分配函数
- C语言内存分配及函数返回值的解析。
- 程序员之---C语言细节22(函数返回指针注意事项<悬空指针>、查看进程能够分配的内存大小)
- C语言calloc()函数:分配内存空间并初始化
- C语言内存分配函数总结
- 程序猿之---C语言细节22(函数返回指针注意事项<悬空指针>、查看进程可以分配的内存大小)