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

C程序设计——函数0

函数定义

前面说过C语言是结构化的程序设计语言,他把所有问题抽象为数据和对数据的操作,前面讲的变量、常量,都是数据。现在开始讲对数据操作——函数。

C语言的函数,定义方式如下:

返回值类型  函数名(参数列表)
{
}

比如我们要定义一个函数,返回值是一个32位的整形;函数名为 sum;参数是两个32位整形数据,名称分别是 iA 和 iB。那么这个函数定义方式如下:

int sum(int iA, int iB)
{}

其中 iA 和 iB 叫做函数sum的形式参数,简称:形参

如果这个函数的要实现的功能是把两个参数 iA 和 iB加起来和,作为函数返回值返回,就是下面这个代码:

int sum(int iA, int iB)
{int iSum;iSum = iA + iB ;return iSum;
}

我们再复习一下,前面讲过,C语言是从main函数开始执行的,因此再在sum 函数的下面定义一个mian函数,就可以在main中调用sum了,像下面这样:

int sum(int iA, int iB)
{int iSum;iSum = iA + iB ;return iSum;
}int main(void)
{int iS ;iS = sum(1, 2);printf("iS == %d\r\n", iS);
}

我们着重看下 sum 的调用方式:

iS = sum(1, 2);

这里的 1 和 2 ,叫做函数sum的实际参数,简称实参

这里是 main函数调用了 sum函数,从关系上讲,main叫做主调函数,sum叫做背调函数。

调用函数sum时,会把 1 赋值给 iA,把2 赋值给iB,然后再把 iA + iB 的和(即 3 == 1 + 2),赋值给 iSum,再然后把 iSum的值,作为函数 sum的返回值,返回给主调函数。

再回到 main,因为 iS 被赋值为 sum 函数值(即返回值),因此 iS 应该被赋值为 3。上述源码打印如下:

函数返回值和参数的类型 

所有的变量类型,都可以作为函数返回值和参数的类型。特别的返回值和参数有一种特殊的类型 void。

当函数返回值为 void 时,该函数没有返回值;

但函数参数为 void 时,该函数没有参数;

比如定义一个没有返回值、没有参数的函数 delay:

void delay(void)
{
}

形参和实参之间的值传递

看下面这段代码: 

int sum(int iA, int iB)
{int iSum;iA += 3 ;iB += 4 ;iSum = iA + iB ;printf("iA == %d\r\n", iA);printf("iB == %d\r\n", iB);printf("\r\n");return iSum;
}int main(void)
{int iS ;int a, b ;a = 10 ;b = 20 ;iS = sum(a, b);printf("a == %d\r\n", a);printf("b == %d\r\n", b);printf("iS == %d\r\n", iS);
}

这次调用 sum函数是,实参是两个变量 a 和 b,其中 a 被赋值为 10,b被赋值为 20 。

这里我们要强调:实参 a 与 形参 iA,是两个不同的变量,函数调用时,只是把 a 的值赋给了 iA;同理,实参 b 与 形参 iB,也是两个不同的变量。

因此,上面的代码中,在sum函数里,虽然我给形参 iA 加3,变成了 13;给形参 iB加4,变成了 14,所以函数返回值应该是27。

但是实参 a 和b的值,并没有变,分别还是10 和 20。

所以上面的代码的运行结果如下:

这里强调一下:

C语言里,所有的参数传递,都是值传递,即形参值改变,不影响实参的值。

http://www.lryc.cn/news/433754.html

相关文章:

  • 第二十一章 rust与动静态库的结合使用
  • 修改服务器DNS解析及修改自动对时时区
  • 中科院TOP“灌水神刊”合集!盘点那些“又牛又水”的国人友好SCI
  • Python列表浅拷贝的陷阱与破解之道
  • 开放式系统互连(OSI)模型的实际意义
  • 回溯——10.全排列 II
  • 基于百度AIStudio飞桨paddleRS-develop版道路模型开发训练
  • 【 C++ 】C/C++内存管理
  • 智能客服的演变:从传统到向量数据库的新时代
  • python使用超级鹰识别验证码
  • 基于YOLO目标检测实现表情识别(结合计算机视觉与深度学习的创新应用)
  • Keil导入包出错
  • 超声波自动气象站
  • Mysql事件操作
  • Python必知必会:程序员必须知道的22个Python单行代码!
  • MongoDB 的适用场景
  • 汽车EDI:montaplast EDI对接
  • 【idea】设置文件模板
  • 时间戳和日期相互转换+检验日期合法性功能C语言
  • SPIRNGBOOT+VUE实现浏览器播放音频流并合成音频
  • C#绘制常用工业控件(仪表盘,流动条,开关等)
  • Ps:颜色模型、色彩空间及配置文件
  • llvm后端之td定义指令信息
  • 战地机房集装箱数据中心可视化:实时监控与管理
  • Linux入门攻坚——31、rpc概念及nfs和samba
  • 内网穿透的应用-本地化部署Elasticsearch平替工具OpenObserve并实现无公网IP远程分析数据
  • 哈希表 and 算法
  • Comsol 共用声固耦合边界与热粘性声学边界的亥姆霍兹腔体超材料板精准隔声设计
  • Linux系统本地化部署Dify并安装Ollama运行llava大语言模型详细教程
  • 极光出席深圳国际人工智能展并荣获“最具投资价值人工智能奖”