当前位置:网站首页>C语言详解系列——函数的认识(3)形参,实参,嵌套调用和链式访问
C语言详解系列——函数的认识(3)形参,实参,嵌套调用和链式访问
2022-07-26 05:10:00 【悲伤猪小猪】
回顾知识
在之前的函数篇章里面我们与大家分享了两个使用函数解决的案例,一个是通过函数来获取两个整形变量的最大值
#include<stdio.h>
int get_max(int x, int y)
{
return (x > y ? x : y);
}
int main()
{
int a = 10;
int b = 20;
int max = get_max(a, b);
printf("%d", max);
return 0;
}
另一个是通过一个函数来实现交换两个整形变量的值
void exchange_num(int* pa, int* pb)
{
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf("交换前: a = %d,b = %d\n", a, b);
exchange_num(&a,&b);
printf("交换后:a = %d,b = %d", a, b);
}
通过这两个代码我们了解到了什么是传值调用什么是传址调用,当我们需要使函数内外有一定的联系时我们需要使用传址调用。
传值调用
函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参
传址调用
传址调用是把函数外部创建变量的内存地址传给函数参数的一种调用函数的方式。
这种传参方式可以让函数和函数外部的变量建立起联系,也就是函数内部可以直接操作函数外部的变量
由上面的知识我们总结出一句话:当函数调用的时候,实参传给形参时,形参将是实参的一份临时拷贝,所以对形参的修改是不影响实参的。这就是之前我们与大家分享的知识,在这里简单的复习一下,我们理解上面黄色背景的字可能有些困难,什么是形参?什么是实参?该如何定义呢?听我一一道来。
形参与实参
实参就是实际参数
真实传给函数的参数叫做实参
实参可以是:常量、变量、表达式、函数等,但无论实参是何种类型的量,在进行函数调用时,他们都必须有确定的值,以便把这些值传递给形参
形参就是形式参数
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。
形式参数调用完之后就自己销毁了,所以形式参数只在函数中有效。
举个例子
void exchange_num(int* pa, int* pb)
{
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf("交换前: a = %d,b = %d\n", a, b);
exchange_num(&a,&b);
printf("交换后:a = %d,b = %d", a, b);
}
还是这个代码,实际参数&a,&b,形式参数是pa,pb。
函数的嵌套调用和链式访问
嵌套调用
顾名思义函数的嵌套调用就是,函数与函数之间可以任意组合,可以根据自己的需求相互调用。我们举一个例子
#include<stdio.h>
int main()
{
int len = strlen("abcdef");
printf("%d\n", len);
}
如图我们想打印字符串"abcdef"的长度,我们使用strlen()库函数来求字符串长度之后用len变量接收,最后使用printf()库函数来打印,这样写是不是太麻烦了,我们可以使用函数的嵌套调用,直接将strlen()库函数求的值打印。
#include<stdio.h>
int main()
{
printf("%d\n", strlen("abcdef"));
}
如图两次的打印结果相同,这就是我们说的函数的嵌套调用,注意函数可以嵌套调用,但是不能嵌套定义。
链式访问
链式访问就是把一个函数的返回值作为另一个函数的参数,我们还是通过例子来让大家理解什么是链式访问
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}
我们分析一下这个代码输出的是什么,我们发现,我们将后面printf()库函数的返回值做为了前一个printf()库函数的参数,那么我们需要知道他的返回值是什么,上一次我们分享了如何学习库函数,现在我们就可以学以致用
我们在网站 www.cplusplus.com 查询printf()这个库函数,看到他的返回值类型的描述,他返回的是打印在屏幕上字符的个数。所以我们第一次输出43,第二次输出打印在屏幕上字符的个数2,第三次输出1,所以最后的结果为
不知道经过我们的讲解大家对嵌套调用和链式访问的认识是否加深了。
边栏推荐
- Excel VBA: summarize calculation output results by date (SUMIF)
- 域名解析过程全分析,就着文字理解更佳
- 基于通用优化软件GAMS的数学建模和优化分析
- A material of machine learning
- Mysql优化
- @Principle of Autowired annotation
- 第二讲 初识SLAM
- Learn to map with nature medicine -- complex heat map
- Mathematical modeling and optimization analysis based on general optimization software gams
- 基于遥感解译与GIS技术环境影响评价图件制作
猜你喜欢

基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习

Shell的read 读取控制台输入、read的使用

Recommend 12 academic websites for free literature search, and suggest to like and collect!

Security permission management details

Five simple and practical daily development functions of chrome are explained in detail. Unlock quickly to improve your efficiency!

C语言实现发牌功能基本方法

【ACWing】2983. 玩具

Textfield and password input box that are more flexible and easy to use in compose

推荐12个免费查找文献的学术网站,建议点赞、收藏!

推荐必读:测试人员如何快速熟悉新业务?
随机推荐
Okaleido上线聚变Mining模式,OKA通证当下产出的唯一方式
Ansible中常用的模块
基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习
ALV程序收集
第二讲 初识SLAM
C语言函数
基于通用优化软件GAMS的数学建模和优化分析
35. 搜索插入位置
DOM事件流 事件冒泡-事件捕获-事件委托
分布式ID的常用解决方案-一把拿下
List转换为tree-项目真实使用
Black eat black? The man cracked the loopholes in the gambling website and "collected wool" for more than 100000 yuan per month
Common solutions for distributed ID - take one
Redis过期删除策略和内存淘汰策略
开发转测试:从零开始的6年自动化之路
域名解析过程全分析,就着文字理解更佳
Excel VBA:按日期汇总计算输出结果(sumif)
使用Ansible中的playbook
flex布局原理及常见的父项元素
Unnamed Article 33