S3-函数(1)下

简介: S3-函数(1)

3、函数的参数

3.1实际参数

真实传给函数的参数,叫实参。

实参可以是:常量、变量、表达式、函数等。

但注意:无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。

3.2形式参数(形参)

形参是指(定义函数)函数名括号中的变量,因为形参只有在函数被调用的过程中才实例化(分配内存单元),所以叫形参。形参当函数调用之后就自动销毁了。因此形参只在函数中有效。

补充说明:

(1)形参与实参类型一致、顺序对应、个数相同  

(2)在被定义的函数中,必须指定形参的类型

(3)若形参与实参类型不一致,自动按形参类型转换

(4)形参与实参占用不同的内存单元,单向传递(实参传给形参)

例:写一个函数交换两个整形变量的内容

//代码1
#include<stdio.h>
void swap(int x, int y)
{
  int tmp = x;
  x = y;
  y = tmp;
}
int main()
{
  int a = 0;
  int b = 0;
  //输入
  scanf("%d %d", &a, &b);
  //用函数交换a和b的值
  swap(a, b);//调用函数
  printf("%d %d\n", a, b);
  return 0;
}


但是我们运行之后发现,并没有成功。

只是为什么呢?

调试


实参a和b

形参x,y

使用的不是同一空间(地址不同)


当函数调用的时候,实参传递给形参,这时形参是实参的一份临时拷贝,对形参的修改不影响实参。 (即形参实例化之后其实相当于实参的一份临时拷贝


那我们怎么可以实现交换呢?这就是我接下来要讲的函数调用。

4、函数调用

  4.1  传值调用

  4.2  传址调用


4.1传值调用

函数的形参和实参分别占用不同内存块,对形参的修改不会影响实参。

4.2传址调用


1、传址调用是把函数外部创建变量的内存地址传递给函数参数(形参)的一种调用函数的方式。

2、这种传参方式可以让函数和函数外边的变量建立真正的联系,也就是函数内部可以直接操作函数外部的变量。


注:1、在一个函数中可以多次调用其他函数,在调用语句中的函数名必须与函数定义中的函数名相同。

2、实际参数应与被调用函数定义中的形式参数个数相同、位置对应并且类型一致。

3、被调用函数必须存在

真正实现两个数内容的交换:传址调用

#include<stdio.h>
//pa--指针变量(用来存放地址的)
//*pa解引用操作-作用就是通过pa中的地址,找到a
void swap(int* pa, int * pb)
{
  int tmp =*pa;//*pa就是a
  *pa= *pb;
  *pb = tmp;
}
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  //用函数交换a,b
  swap(&a, &b);
  printf("%d %d\n", a, b);
  return 0;
}


注:地址是固定的,不能修改。

相关文章
|
存储 消息中间件 分布式计算
|
6月前
|
移动开发 JavaScript 前端开发
vue中npm打包遇到× eslint —fix found some errors. Please fix them and try committing again.husky > pre-commit hook failed (add —no-verify to bypass)报错解决方案-卓伊凡
vue中npm打包遇到× eslint —fix found some errors. Please fix them and try committing again.husky > pre-commit hook failed (add —no-verify to bypass)报错解决方案-卓伊凡
214 7
vue中npm打包遇到× eslint —fix found some errors. Please fix them and try committing again.husky > pre-commit hook failed (add —no-verify to bypass)报错解决方案-卓伊凡
|
6月前
|
算法
面试场景题:如何设计一个抢红包随机算法
本文详细解析了抢红包随机算法的设计与实现,涵盖三种解法:随机分配法、二倍均值法和线段切割法。随机分配法通过逐次随机分配金额确保总额不变,但易导致两极分化;二倍均值法优化了金额分布,使每次抢到的金额更均衡;线段切割法则将总金额视为线段,通过随机切割点生成子金额,手气最佳金额可能更高。代码示例清晰,结果对比直观,为面试中类似算法题提供了全面思路。
1148 16
|
10月前
|
存储 安全 关系型数据库
权限组件是怎么设计的
【10月更文挑战第26天】在实际设计过程中,还需要根据具体的业务需求和技术架构进行灵活调整和优化。
|
机器学习/深度学习 人工智能 编解码
AI文生图模型
8月更文挑战第16天
|
机器学习/深度学习 自然语言处理 搜索推荐
深度之眼(二十五)——研究生学习计划安排
深度之眼(二十五)——研究生学习计划安排
172 2
|
Java 测试技术 持续交付
自动化测试框架选型与实战:深入探索与应用
【5月更文挑战第8天】本文探讨了自动化测试框架的选型与实战应用,强调了其在软件质量保障中的重要性。选型原则包括考虑项目需求、技术栈、可扩展性和可维护性,以及社区支持和文档。介绍了Selenium、Appium、JUnit和Pytest等常用框架,并概述了实战应用的步骤,包括明确需求、搭建环境、编写测试用例、执行测试、分析结果、维护代码和持续集成。合理选型与实践能提升测试效率,保障项目成功。
|
Linux C语言 芯片
【系统启动】uboot启动流程源码分析
【系统启动】uboot启动流程源码分析
378 0
|
Shell 数据安全/隐私保护 Docker
docker安装anaconda3 python环境
docker安装anaconda3 python环境
400 0
44Echarts - 柱状图(阶梯瀑布图)
44Echarts - 柱状图(阶梯瀑布图)
280 0