C程序设计——函数0

news2024/9/22 4:21:26

函数定义

前面说过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.coloradmin.cn/o/2108142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文速读|重新审视奖励设计与评估:用于强健人型机器人站立与行走控制的方法

论文地址:https://arxiv.org/pdf/2404.19173 这篇论文为类人机器人站立和行走(SaW)控制器的持续可衡量改进奠定了基础。通过引入一套定量实际基准测试方法,作者展示了现有控制器的优缺点,并通过基准测试指导新控制器的…

龙芯L2K0300开发板综合测试

CPU 查看cpu版本信息 cat /proc/cpuinfo可以看到cpu是64位的LoongsonArch架构 stress压力测试结果 RAM 久久派板载512MB DDR4-2666内存&#xff0c;查看内存信息 cat /proc/meminfo可以用memtester进行内存性能测试 memtester <size> <times>memtester测试结果…

Java 工程师转型大数据的优势——别小看自己!

时间&#xff1a;2024年09月05日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址: https://xima.tv/1_U3suSJ?_sonic0 希望大家帮个忙&#xff01;如果大家有工作机会&#xff0c;希望帮小蒋推荐一下&#xff0c;小蒋希…

2024国赛数学建模A题思路模型

完整的思路模型请查看文末名片

机器学习:opencv图像识别--模版匹配

目录 一、模版匹配的核心概念 1.图片模板匹配是一种用于在图像中查找特定模式或对象的技术。 2.模板图像 3.目标图像 4.滑动窗口 5.相似度度量 6.匹配位置 二、模版匹配的步骤 1.准备图像&#xff1a; 2.预处理&#xff1a; 3.匹配&#xff1a; 4.定位最佳匹配&…

【MySQL】初识MySQL—MySQL是啥,以及如何简单操作???

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解关于MySQL的简单使用和注意事项&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;http://t.csdnimg.cn/wwaqe &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 目…

2024数学建模国赛题目A-E题

2024数学建模国赛题目A-E题已经发布 各个赛题题目如下 A题 板凳龙 闹元宵 B题 生产过程中的决策问题 C题 农作物的种植策略 D题 反潜航空深弹命中概率问题 E题 交通流量管控 Csdn在文末&#xff0c;关注云顶数模公众号&#xff0c;或者点击下方名片。

2024年高教社杯数学建模国赛赛题浅析——助攻快速选题

一图流——一张图读懂国赛 总体概述&#xff1a; A题偏几何与运动学模型&#xff0c;适合有几何与物理背景的队伍&#xff0c;数据处理复杂性中等。 B题侧重统计和优化&#xff0c;适合有运筹学和经济学背景的队伍&#xff0c;数据处理较为直接但涉及多步骤的决策优化。 C题…

新手c语言讲解及题目分享(十六)--文件系统专项练习

在我刚开始学习c语言的时候就跳过了这一章节&#xff0c;但在后面慢慢发现这一章节还是比较重要的,如果你报考了计算机二级c语言的话&#xff0c;你应该可以看到后面的三个大题有时会涉及到这章。所以说这章还是非常重要的。 目录 前言 一.打开文件 1.Fopen( )函数返回值 2&…

Keil发现Error: C9555E: Failed to check out a license

遇到这样的问题 解决办法&#xff1a; 换成这个版本 然后重新用keygen生成license

如何理解进程和线程之间的关系

目录 前言 一、进程和线程的关系 1、引入线程的原因 2、线程的特点 3、线程和进程的关系 二、如何在进程中创建线程 1、创建线程的函数 2、举例使用&#xff1a; 三、线程间的同步互斥机制 1、什么是同步互斥机制 2、如何在线程中使用同步互斥机制 3、实际举例 总结 前言 …

为什么要有RPC

​ 1. RPC&#xff08;Remote Procedure Call&#xff09; 定义&#xff1a; RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种允许程序在不同的地址空间&#xff08;通常是在网络上的不同机器&#xff09;之间调用函数或方法的机制。它使得…

代码随想录算法训练营Day03 | 链表理论基础、203.移除链表元素 、707.设计链表、206.反转链表

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 链表理论基础203.移除链表元素思路与重点 707.设计链表思路与重点 206.反转链表思路与重点 链表理论基础 C/C的定义链表节点方式&#xff1a; // 单链表 struct L…

vue part 8

浏览器本地存储 application&#xff0c; local storage中 js方法肯定会用很多呀&#xff0c;只是不直接操作dom了但是对对象和数组进行操作还是原先的方法&#xff0c;jq的话想用引入就可以了。我是直接放弃jq了&#xff0c;在框架中用jq包不好 sessionStorage.HTML <!…

Git+word记笔记

程序员记笔记主要同步很重要&#xff0c;我这个方法只支持个人笔记&#xff0c;如果团队还是用企业微信开个企业会员比较方便。为什么用word&#xff0c;因为可以镶嵌代码和文档&#xff0c;不仅仅是文字&#xff0c;兼容性强 语雀&#xff0c;云笔记这些对于上传的word都是有…

AI大模型编写多线程并发框架(六十五):发布和应用

系列文章目录 文章目录 系列文章目录前言一、项目背景二、第十三轮对话-优化传参三、第十四轮对话-释放资源四、完善所有单元测试五、验证通过六、发布七、参考文章 前言 在这个充满技术创新的时代&#xff0c;AI大模型正成为开发者们的新宠。它们可以帮助我们完成从简单的问答…

IA——网络操作设备VRP简介

一&#xff0c;VRP简介 二&#xff0c;网络设备的管理 &#xff08;1&#xff09;console口&#xff1a; &#xff08;2&#xff09;talnet: &#xff08;3&#xff09;SSH: 安全的远程登陆 &#xff08;4&#xff09;通过WEB页面登录&#xff1a; 三&#xff0c;命令行常见…

TikTok养号一般养几天?账号起步方法

TikTok养号是一个关键的步骤&#xff0c;它可以帮助新账号快速积累粉丝和观众&#xff0c;增加视频的曝光和互动率&#xff0c;从而提升账号的影响力和可见性。但是养号也并不是简单的登录账号、互动点赞&#xff0c;而是从底层设备到分发频率都需要讲究方法&#xff0c;否则号…

linux下c语言中的单向列表,双向链表,内核双向列表,及适用场景

1. 单向链表&#xff08;Singly Linked List&#xff09; 1.1 定义与结构 单向链表是链式存储结构中最简单的一种。它的每个节点包含两个部分&#xff1a; - 数据域&#xff1a;存储数据元素 - 指针域&#xff1a;存储指向下一个节点的指针 在单向链表中&#xff0c;节点通过…

OpenHarmony实战开发:@Watch装饰器:状态变量更改通知

往期鸿蒙全套实战精彩文章必看内容&#xff1a; 鸿蒙开发核心知识点&#xff0c;看这篇文章就够了 最新版&#xff01;鸿蒙HarmonyOS Next应用开发实战学习路线 鸿蒙HarmonyOS NEXT开发技术最全学习路线指南 鸿蒙应用开发实战项目&#xff0c;看这一篇文章就够了&#xff08…