您的位置:首页 > 编程语言 > C语言/C++

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;
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: