当前位置:网站首页>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,所以最后的结果为
不知道经过我们的讲解大家对嵌套调用和链式访问的认识是否加深了。
边栏推荐
- Ansible tutorial
- Migrate the server and reconfigure the database (the database has no monitoring, and the monitoring starts with tns-12545, tns-12560, tns-00515 errors)
- 基于通用优化软件GAMS的数学建模和优化分析
- 推荐系统-机器学习
- 地球系统模式(CESM)实践技术
- ABAP语法学习(ALV)
- C language force buckle question 42 of rain. Four methods - violence, dynamic planning, stack, double pointer
- AQS唤醒线程的时候为什么从后向前遍历,我懂了
- flex布局原理及常见的父项元素
- YOLOv5执行全过程----目录
猜你喜欢

Week 6 Learning Representation: Word Embedding (symbolic →numeric)

阿里三面:MQ 消息丢失、重复、积压问题,如何解决?

C语言函数

uniapp小程序框架-一套代码,多段覆盖

Application of remote sensing, GIS and GPS technology in hydrology, meteorology, disasters, ecology, environment and health

ALV程序收集

How to reproduce the official course of yolov5 gracefully (II) -- Mark and train your own data set

How many holes have you stepped on in BigDecimal?

Embedded sharing collection 21

Week 6 Learning Representation: Word Embedding (symbolic →numeric)
随机推荐
Practical technology of SWAT Model in simulation of hydrology, water resources and non-point source pollution
Excel VBA:实现自动下拉填充公式至最后一行
uniapp小程序框架-一套代码,多段覆盖
一次线上事故,我顿悟了异步的精髓
JVM Lecture 2: class loading mechanism
测试必备工具之Fiddler,你真的了解吗?
MySQL basic learning
关于负数表示的数值为什么比整数大1?
Earth system model (cesm) practical technology
Week 6 Learning Representation: Word Embedding (symbolic →numeric)
测试用例评审如何开展
DOM事件流 事件冒泡-事件捕获-事件委托
NPM operation instruction
Application of remote sensing, GIS and GPS technology in hydrology, meteorology, disasters, ecology, environment and health
Uniapp applet framework - a set of code, multi segment coverage
Excel VBA:将多个工作表保存为新文件
C语言-指针进阶
新导则下的防洪评价报告编制方法及洪水建模
Leetcode linked list problem - 206. reverse linked list (learn linked list by one question and one article)
ThreadLocal transfer between parent and child threads in asynchronous