【C语言】5.C语言函数(1)

文章目录

  • 1.函数的概念
  • 2.库函数
    • 2.1 标准库和头文件
    • 2.2 库函数的使⽤⽅法
      • 2.2.1 学习和使用
      • 2.2.2 头⽂件包含
      • 2.2.3库函数文档的一般格式
  • 3.⾃定义函数
    • 3.1 函数的语法形式
  • 4.形参和实参
    • 4.1 实参
    • 4.2 形参
    • 4.3 实参和形参的关系
  • 5.return 语句
  • 6.数组做函数参数


1.函数的概念

函数也称:子程序。

C语言中的函数就是一个完成某项特定的任务的一小段代码。

C语言的程序其实是由无数个小的函数组合而成的,也可以说:一个大的计算任务可以分解成若干个较小的函数(对应较小的任务)完成。

在C语言中我们一般会见到两类函数:

  • 库函数
  • 自定义函数

2.库函数

2.1 标准库和头文件

库函数:C语言的国际标准ANSIC规定了一些常用的函数的标准,被称为标准库。不同的编译器厂商根据ANSI提供的C语言标准就给出了一系列函数的实现。这些函数就被称为库函数。

我们前面内容中学到的 printfscanf 都是库函数,库函数也是函数,不过这些函数已经是现成的,我们只要学会就能直接使用了。

有了库函数,一些常见的功能就不需要程序员自己实现了,一定程度提升了效率;同时库函数的质量和执行效率上都更有保证。

各种编译器的标准库中提供了一系列的库函数,这些库函数根据功能的划分,都在不同的头文件中进行了声明。

库函数相关头文件:https://zh.cppreference.com/w/c/header


2.2 库函数的使⽤⽅法

2.2.1 学习和使用

库函数的学习和查看工具很多:

C/C++官方的链接:https://zh.cppreference.com/w/c/header

cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/

2.2.2 头⽂件包含

库函数是在标准库中对应的头文件中声明的,所以库函数的使用,务必包含对应的头文件,不包含是可能会出现一些问题的。

2.2.3库函数文档的一般格式

  1. 函数原型

  2. 函数功能介绍

  3. 参数和返回类型说明

  4. 代码举例

  5. 代码输出

  6. 相关知识链接


3.⾃定义函数

3.1 函数的语法形式

其实自定义函数和库函数是一样的,形式如下:

ret_type fun_name(形式参数)
{}
  • ret_type 是函数返回类型,例如voidint 等等。
  • fun_name 是函数名,函数有了名字方便调用,所以函数名尽量要根据函数的功能起的有意义。
  • 括号中放的是形式参数,函数的参数也可以是 void ,明确表示函数没有参数。如果有参数,要交代清楚参数的类型和名字,以及参数个数。
  • {}括起来的是函数体,函数体就是完成计算的过程。

4.形参和实参

在函数使用的过程中,把函数的参数分为,实参和形参。

4.1 实参

#include <stdio.h>
int Add(int x, int y)
{int z = 0;z = x+y;return z;
}
int main()
{int a = 0;int b = 0;//输入scanf("%d %d", &a, &b);//调用加法函数,完成a和b的相加//求和的结果放在r中int r = Add(a, b);//输出printf("%d\n", r);return 0;
}

我们看16行,int r = Add(a, b);这里的a,b就是实参,指的是传递给被调用函数Add的参数。

实际参数就是真实传递给函数的参数。

4.2 形参

我们看2行,int Add(int x, int y)这里的x,y就是形参,指的是Add函数接收传递过来a,b的值的载体。

为什么叫形式参数呢?

实际上,如果只是定义了 Add 函数,而不去调用的话, Add 函数的参数 x和 y 只是形式上存在的,不会向内存申请空间,因为不是真实存在的,所以叫形式参数。

形参的实例化:形式参数只有在函数被调用的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程就是形参的实例化。

4.3 实参和形参的关系

形参和实参虽然有一点联系,但是形参和实参各自是独立的内存空间。

所以我们可以理解为形参是实参的一份临时拷贝。


5.return 语句

return语句使用注意事项:

  • return后边可以是一个数值,也可以是一个表达式,如果是表达式则先执行表达式,再返回表达式的结果。

  • return后边也可以什么都没有,直接写 return; 这种写法适合函数返回类型是void的情况。

  • return返回的值和函数返回类型不一致,系统会自动将返回的值隐式转换为函数的返回类型。

  • return语句执行后,函数就彻底返回,后边的代码不再执行。

  • 如果函数中存在if等分支的语句,则要保证每种情况下都有return返回,否则会出现编译错误。


6.数组做函数参数

在使用函数解决问题的时候,难免会将数组作为参数传递给函数,在函数内部对数组进行操作。

比如:写一个函数将一个整型数组的内容,全部置为-1,再写一个函数打印数组的内容。

#include <stdio.h>
int main()
{int arr[] = {1,2,3,4,5,6,7,8,9,10};set_arr();//设置数组内容为-1print_arr();//打印数组内容return 0;
}

这里的set_arr函数要能够对数组内容进行设置,就得把数组作为参数传递给函数,同时函数内部在设置数组每个元素的时候,也得遍历数组,而且需要知道数组的元素个数。

所以我们需要给set_arr传递2个参数,一个是数组,另外一个是数组的元素个数。仔细分析print_arr也是一样的,只有拿到了数组和元素个数,才能遍历打印数组的每个元素。

#include <stdio.h>
int main()
{int arr[] = {1,2,3,4,5,6,7,8,9,10};int sz = sizeof(arr)/sizeof(arr[0]);set_arr(arr, sz);//设置数组内容为-1print_arr(arr, sz);//打印数组内容return 0;
}

数组传参的几个重点知识:

  • 函数的形式参数要和函数的实参个数匹配
  • 函数的实参是数组,形参也是可以写成数组形式的
  • 形参如果是一维数组,数组大小可以省略不写
  • 形参如果是二维数组,行可以省略,但是列不能省略
  • 数组传参,形参是不会创建新的数组的
  • 形参操作的数组和实参的数组是同一个数组
void set_arr(int arr[], int sz)
{int i = 0;for(i=0; i<sz; i++){arr[i] = -1;}
}
void print_arr(int arr[], int sz)
{int i = 0;for(i=0; i<sz; i++){printf("%d ", arr[i]);}printf("\n");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/12930.shtml

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

相关文章

C#【进阶】委托和事件

委托和事件 文章目录 1、委托1、委托概念2、基本语法3、定义自定义委托4、使用自定义委托5、委托变量可以存储多个函数6、系统定义好的委托思考 怪物死亡数据更新 2、事件1、事件概念2、事件的使用3、为什么有事件思考 热水器 3、匿名函数1、匿名函数概念2、基本语法3、使用4、…

iLogtail 社区开源之夏活动来了!

作者&#xff1a;玄飏 在这个充满活力的夏日&#xff0c;随着阳光一同灿烂的是开源精神的光辉与创新的火花。iLogtail 社区高兴地宣布&#xff0c;我们正式加入开源之夏 2024 的行列&#xff0c;诚邀每一位怀揣梦想与激情的学生开发者&#xff0c;共同开启一场探索技术前沿、贡…

机器学习入门介绍

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 目录 三大方向机器学习产生的原因机器如何学习…

sklearn机器学习编程练习大全(一)

sklearn机器学习编程练习大全 第1题 计算DataFrame每列的缺失值比例第2题 填充缺失值第3题 使用常量填充缺失值第4题 使用最频繁出现的值填充缺失值第5题 过滤掉存在空值的行第6题 使用常量填充字符串列第7题 数值离散化第8题 虚拟编码第9题 提取元素的个数第10题 特征提取--是…

基于springboot+vue+Mysql的大学生社团活动平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

图文成片剪辑软件,分享3个专业的工具!

在数字化时代&#xff0c;图文成片剪辑软件成为了我们创作与表达的重要工具。无论是想要制作一段引人入胜的短视频&#xff0c;还是打造一幅精美的图文海报&#xff0c;这些软件都能助你一臂之力。那么&#xff0c;图文成片剪辑软件的方法有哪些&#xff1f;又有哪些值得一试的…

PHP开发中的不安全反序列化

序列化是开发语言中将某个对象转换为一串字节流的过程&#xff0c;转换后的字节流可以方便存储在数据库中&#xff0c;也可以方便在网络中进行传输。而反序列化则是将数据库取出的字节流或从网络上接收到的字节流反向转换为对象的过程。概念虽如此&#xff0c;但不同的开发语言…

ASP.NET在线二手交易系统的设计与实现

摘 要 随着当今社会信息技术的进步&#xff0c;基于互联网的各种应用日益受到了人们的重视&#xff0c;二手商品的重新利用也逐渐被人们关注&#xff0c;二手交易系统就在这种形势下产生了&#xff0c;它利用网络&#xff0c;改变了人们的购物方式。 本文是基于现代二手交易…

AC/DC电源模块的故障诊断与维修技巧

BOSHIDA AC/DC电源模块的故障诊断与维修技巧 AC/DC电源模块是一种常用的电力转换设备&#xff0c;用于将交流电转换为直流电供给电子设备。然而&#xff0c;由于使用环境和操作不当等原因&#xff0c;电源模块可能会出现故障。本文将介绍AC/DC电源模块的故障诊断与维修技巧。…

什么?你设计接口什么都不考虑?

如果让你设计一个接口&#xff0c;你会考虑哪些问题&#xff1f; 1.接口参数校验 接口的入参和返回值都需要进行校验。 入参是否不能为空&#xff0c;入参的长度限制是多少&#xff0c;入参的格式限制&#xff0c;如邮箱格式限制 返回值是否为空&#xff0c;如果为空的时候是…

VC++6.0自定义实现日志记录到文件及界面显示

1&#xff0c;实现日志记录到文件&#xff0c;支持日志文件大小限制&#xff0c;节省空间 void CController::LogWriteRecord(CString strText,CString strFileName) {CStdioFile csFile;try{BOOL bRet csFile.Open(strFileName,CFile::modeCreate|CFile::modeNoTruncate|CFi…

不相交集合的数据结构

一、不相交集合的操作 不相交集合的数据结构维护了一组不相交动态集的集合 &#xff0c;用集合中的某个成员作为代表标识集合。 集合在没有修改的情况下每次访问代表得到的答案是相同的&#xff0c;此外在其它一些应用中&#xff0c;可能按照规定选择集合的代表&#xff0c;例如…

【CSS基础】

4.CSS基础 4.1css的介绍 层叠样式表(英文全称:Cascading Style Sheets),是一种对web文档添加样式的简单机制&#xff0c;属于表现层的布局语言.4.2css基础语法 CSS语法由两部分组成&#xff1a;选择符、声明。 声明包括&#xff1a;属性和属性值选择符 {属性: 属性值 ;属性:…

docker 配置文件使用经验,后续持续增加

1. 容器中如何访问主机服务 在docker容器、docker compose 中如何访问主机服务呢&#xff1f; docker容器 20.10.0 版本在 linux 新增 host.docker.internal 支持&#xff1a; docker run -it --add-hosthost.docker.internal:host-gateway alpine cat /etc/hosts 127.0.0.…

leetcode hot100_part28_图论

目录 200.岛屿数量 DFS bfs 并查集 994.腐烂的橘子 207.课程表 DFS BFS 208.实现Trie&#xff08;前缀树&#xff09; 做完了这四题&#xff0c;总结一下&#xff0c;还是要掌握基本的dfs&#xff0c;bfs模版&#xff0c;都是在这些基础上变换的。 模版&#xff1a; …

项目-坦克大战

增加功能 我方坦克在发射的子弹消亡后&#xff0c;才能发射新的子弹。同时实现发多颗子弹 1&#xff0c;在按下J键&#xff0c;我们判断当前hero对象的子弹&#xff0c;是否已经销毁2&#xff0c;如果没有销毁&#xff0c;就不去触发shotEnemyTank3&#xff0c;如果已经销毁&…

WebSocket or SSE?即时通讯的应用策略【送源码】

最近在研究H5推送&#xff0c;发现除了我们常用的WebSocket以外&#xff0c;其实还有一种协议也能实现H5推送&#xff0c;那就是SSE协议。 而且&#xff0c;当前主流的大模型平台&#xff0c;比如ChatGPT、通义千问、文心一言&#xff0c;对话时采用的就是SSE。 什么是SSE协议…

文件上传OSS实现

1). 定义OSS相关配置 在sky-server模块 application-dev.yml sky:alioss:endpoint: oss-cn-hangzhou.aliyuncs.comaccess-key-id: LTAI5tPeFLzsPPT8gG3LPW64access-key-secret: U6k1brOZ8gaOIXv3nXbulGTUzy6Pd7bucket-name: sky-take-outapplication.yml spring:profiles:a…

100m/s高速轧制钢材 八轴测径仪检测毫无压力

关键词&#xff1a;八轴测径仪,在线测径仪,钢材测径仪,高速轧制 随着技术的提升&#xff0c;钢材的生产速度越来越快&#xff0c;一些高速生产的钢材&#xff0c;生产速度甚至达到了100m/s&#xff0c;这是一个非常快的速度。 如果汽车以120公里/小时的速度行驶&#xff0c;那么…

Unity WebGL全屏显示

一、删除footer节点 二、删除最下面点击事件绑定 修改Canvas宽高 canvas.style.width "960px"; canvas.style.height "600px"; 改成 canvas.style.width document.documentElement.clientWidth"px"; canvas.style.height document.document…