C语言指针的函数引用用法,c语言的函数内存分配及指针函数的用法

程序中定义了一个函数,在编译时,编译系统会为函数代码分配一段存储空间,这段存储空间的起始地址称为这个函数的指针。关于系统为函数分配内存的情况,度娘的答案如下:当源码被编译成二进制文件后,其中的变量,函数的虚拟地址,也就是内存空间中的地址就已确定,在运行时,操作系统为其分配物理内存并添加虚拟地址到物理地址的映射。

一个进程(运行的程序)可分为若干段:代码段、数据段、堆栈段等,其中函数所操作的空间(也就是局部变量的空间)就位于堆栈段,所谓函数分配内存大小,实际就是堆栈段指针的变化而已。

函数指针例子如下:

#include

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

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;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,指针函数是一种特殊的函数,其返回类型为指针类型。指针函数用法如下: 1. 声明:指针函数的声明方式与普通函数相似,只是返回类型位一个指针变量,可以通过指针变量来获取值。例如: int *sum(int x); 这个声明表示sum函数是一个指针函数,接受一个整数参数x,返回一个整数指针。 2. 定义:指针函数的定义方式与普通函数类似,只是在返回类型前加上指针符号*,并在函数体内使用指针变量来存储计算结果。例如: int *sum(int x){ static int sum = 0; // static修饰的变量在数据段,不会被函数栈回收 int *p; int i; for(i = 1; i <= x; i++) { sum += i; } p = ∑ return p; } 这个定义表示sum函数是一个指针函数,实现了计算1到x的和,并返回一个指向sum变量的指针。 3. 调用:指针函数的调用方式与普通函数类似,只是将函数名后面的括号中的参数省略,直接使用指针变量来接收函数的返回值。例如: int *p1; p1 = sum(a); 这个调用将sum函数的返回值赋给指针变量p1,使p1指向sum变量。 综上所述,C语言中的指针函数用于返回指针类型的值,可以通过指针变量来获取函数的计算结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C语言基础知识:函数指针&指针函数(定义格式、作用及用法说明)](https://blog.csdn.net/baidu_37973494/article/details/83150266)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值