指针函数 和 函数指针数组 的简单用法
例如:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//指针函数 --- 一个函数,它的返回值是指针
char * fun1(void)
{
char p[] = "hello world";
return p; //不能返回栈中的地址,因为函数执行结束时,栈的空间就释放了
}
char * fun2(void)
{
static char p[] = "hello world"; //可以返回.data或.bss中的地址,返回后该空间是可读可写
return p;
}
char * fun3(void)
{
char *p = "hello world";
return p; //可以返回.rodata中的地址,返回后该空间中的数据不能修改,为只读数据
}
char * fun4(void) //
{
char *p = (char*)malloc(20);
strcpy(p,"hello world");
return p; //可以返回.heap中的地址,返回后该空间是可读可写
}
int main(void)
{
char *str = NULL;
str = fun4(); ///可以使用此处尝试
printf("str = %s\n",str);
*str = 'H'; // 把'h'更改为'H'
printf("str = %s\n",str);
strcpy(str,"farsight");
printf("str = %s\n",str);
return 0;
}
函数指针数组的使用
元素类型为函数指针类型的数组称为函数指针数组
例如:
int (*p[5])(int,int); //p为函数指针数组,有5个元素,每个元素为函数指针,函数指针指向的函数有两个int型参数,有一个int型返回值
例如:
int fun1(int a,int b)
{
return a + b;
}
int fun2(int a,int b)
{
return a - b;
}
int fun3(int a,int b)
{
return a * b;
}
int fun4(int a,int b)
{
return a / b;
}
int main(void)
{
int a,b;
printf("请输入a和b:");
scanf("%d%d",&a,&b);
/*
printf("%d + %d = %d\n",a,b,fun1(a,b));
printf("%d - %d = %d\n",a,b,fun2(a,b));
printf("%d * %d = %d\n",a,b,fun3(a,b));
printf("%d / %d = %d\n",a,b,fun4(a,b));
*/
int (*arr[4])(int,int) = {fun1,fun2,fun3,fun4}; //定义函数指针数组,保存4个函数的入口地址
int i;
char str[] = "+-*/";
for(i = 0 ; i < 4; i++) //通过数组循环调用不同的函数
printf("%d %c %d = %d\n",a,str[i],b,arr[i](a,b));
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)