当前位置: 首页 > news >正文

c语言--函数(二)

函数调用

调用前,必须先定义。
使用圆括号 ,(), 函数调用运算符。 add(); 即使函数的调用,没有参数,括号不能省略。

如果需要传递参数话
1.传递参数的 个数保持一致,
2.参数类型的需要匹配。

函数的调用过程
#include <stdio.h>
void fun3()
{
printf(“this is fun3…\n”);
return ;
}
void fun2()
{
fun3();
printf(“this is fun2…\n”);
return ;
}
void fun1()
{
fun2();
printf(“this is fun1…\n”);
return ;
}
int main()
{
fun1();
printf(“this is main…\n”);
return 0;
}


函数调用流程

函数参数的传递

值传递

1.值传递 , 实参把参数数据的内容通过赋值运算符给 形参的形式。 形参是实参的一个副本(复制品)。数据内容是相同的,实参的内存空间,和形参的内存,是独立。 没有办法通过修改形参来达到修改实参的目的。

值传递只能读取实参的值, 不能进行修改

#include <stdio.h>
void fun(int arg)
{
arg++;
printf(“fun arg:%d\n”,arg);
}
void swap(int a,int b)
{
int t = 0 ;
t = a;
a = b;
b =t;
printf(“swap a:%d b:%d\n”,a,b);
}
int main()
{
int i =10;
fun(i);
printf(“i:%d\n”,i);
int a = 20;
int b =1;
swap(a,b);
printf(“main a:%d,b:%d\n”,a,b);
return 0;
}

地址传递

地址传递 ,实参传递变量的内存地址值。 即可以读实参的 数据的值 ,也可以修改。
一维整形数组做参数 , 本质是地址传递。

void fill_array(int a[],int size)// int [] a; // 如果是整形数组的化,还需要数组的大小
{
// 如果实参是数组类型,在被调内部,会降级为指针( 8 byte ,是数组在内存中的一个编号)
// int size = sizeof(a)/sizeof(a[0]);
int i = 0 ;
for(i=0;i<size;i++)
{
// 这个不是值传递, 所以可以修改数组。
a[i] = rand()%30;
}
// printf(“sizeof is a %lu\n”,sizeof(a));
// printf(“sizeof is a[0] %lu\n”,sizeof(a[0]));
}
int main()
{
srand(time(NULL));
int array[10]={0};
int size = sizeof(array)/sizeof(array[0]);
fill_array(array,size);// int []
return 0;
}
函数版本
遍历
逆序
排序 ,冒泡,选择

一维字符数组的传参 , 本质是地址传递

// 对于字符数组(字符串)而言, 约定以\0 结尾。
// 所用可以通过判断\0 的位置,可以得出字符串的长度。
// 所以不需要传入 size
int mystrlen(char a[]) // 依然是地址传递,可以对数组对写操作
{
// sizeof(a) == 8byte
int len = 0 ;
while(1)
{
if(‘\0’!=a[len])
{
len++;
}
else
{
break;
}
}
return len;
}
int main()
{
char str[100]={0}; // char []
printf(“input string1:”);
gets(str); // hello\0
int len =mystrlen(str)
return 0;
}
函数版本
遍历
mystrcmp
mystrcpy
mystrcat
mystrlen

函数的递归

难点 ,不是重点。
定义:

  1. 在函数内部,自己调用自己的函数调用,被称为函数的递归。
  2. 属于循环的一种 表现形式。 区别,会使用栈空间。
    注意,
  3. 需要设置合理的退出条件。
  4. 递归的层次不要太深,会消耗大量的内存,可能导致程序崩溃。
  5. 应用:回溯类, 逆向思维的问题的

代码与过程实例

//5! 1*2*3*4*5intfun(intn){if(1==n||0==n){return1;}else{returnfun(n-1)*n;}}intmain(){intret=fun(3);printf(" 3 的阶乘 %d\n",ret);return0;}
http://www.jsqmd.com/news/782517/

相关文章:

  • N_m3u8DL-RE如何深度解析加密流媒体:架构设计与实战优化指南
  • Windows Subsystem for Android终极指南:在Windows 11上完美运行Android应用
  • 2026年唐山外墙清洗与烟道保洁一体化解决方案深度横评 - 企业名录优选推荐
  • 2026年昆明注册公司代办机构口碑排行,十大财税机构优选指南 - 品牌智鉴榜
  • 太原豆包推广技术解析:精准获客的实操指南 - 奔跑123
  • 单例模式:C++实现与多线程安全
  • 如何用OBS虚拟摄像头打破Windows视频应用的限制
  • 2026最新西安正规二手空调售卖服务商实力排行盘点 - 奔跑123
  • 重构视频播放体验:现代化前端架构的3大突破
  • 2026年封罐机行业指南:真空封罐机、充氮封罐机厂家及半自动封罐机生产厂家推荐 - 栗子测评
  • 太原豆包推广怎么选?本地企业真实获客案例参考 - 奔跑123
  • 大模型不只是会聊天:一文看懂 Harness Engineering
  • 替代RCF陶瓷纤维的生产工厂及行业应用解析 - 品牌排行榜
  • 利用Taotoken实现AI应用对不同模型API的快速切换与降级
  • 增量备份为什么还是这么慢?KingbaseES块级永久增量备份给出答案!
  • 基于agentforge框架构建多智能体系统:从原理到实践
  • AI模型优化与部署实战:PrunaAI一站式平台解析
  • Creating a Property Page for Object Properties-自定义 编辑 - 属性
  • 《解决冲突的关键技巧》
  • 2026年唐山外墙清洗、烟道保洁与商业保洁一站式解决方案深度指南 - 企业名录优选推荐
  • 艾尔登法环帧率解锁终极指南:告别60帧限制的完整解决方案
  • 2026年气凝胶保温涂料优质厂家推荐指南 朗缪环保科技(天津)有限公司优选 气凝胶粉体/气凝胶隔热保温涂料/气凝胶涂料/气凝胶保温涂料/气凝胶 - 奔跑123
  • 为Claude Code配置Taotoken以解决封号与Token不足痛点
  • 终极QQ音乐格式转换指南:qmc-decoder快速解密你的加密音乐文件
  • 拼多多电商数据采集终极指南:5分钟搭建专业级爬虫系统
  • 2026中国DevOps平台选型:合规适配与技术演进的双重挑战
  • 2026年必备:学长亲测降至5%!10款降AI率工具红黑榜,免费论文降AI降低AI率指南 - 降AI实验室
  • 2026年四川环保设备选型指南:认准四川怡源溪,合规高效更省心 - 飞花令2022
  • QtScrcpy跨平台投屏控制:5大实战技巧与模块化设计指南
  • 2026年5月佛山公寓床采购指南:为何广东木偶人家具有限公司成为智慧校园首选 - 2026年企业推荐榜