【C语言课堂】 函数精讲

news2024/11/18 20:16:07

欢迎来到 Claffic 的博客 💞💞💞

前言:
上期我们详细讲了分支和循环语句,这次我们来讲解函数。说到函数,大家应该不陌生。C语言中的函数是什么样的呢?听我娓娓道来 ~ 


目录

❤️1.何为函数

🧡2. C语言中的两种函数

2.1库函数

2.2自定义函数

💛3.函数的参数

3.1实参

3.2形参

💜4.函数的调用

4.1传值调用

4.2传址调用

💚5.函数的嵌套调用和链式访问

5.1嵌套调用

5.2链式访问

💙6.函数的声明和定义

6.1函数的声明

6.2函数定义


1.何为函数

维基百科中对函数的定义:子程序 

▪️ 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,
subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组
成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。 

▪️ 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。 

定义很专业,看不懂不要慌,接下来慢慢讲述:

2. C语言中的两种函数

2.1库函数

字面意思,库函数就是库里的函数,可以直接拿来用。

不知到大家注意没,在往期博客写下的代码中有个函数频繁出现:printf (打印函数),这个函数就是库函数,在引用头文件之后就可以直接使用。

还有一些情况:比如拷贝字符串(strcpy),计算 n 的 k 次方(pow)等,都是频繁使用到的函数。

像上面描述的基础功能,它们不是业务性的代码。我们在开发的过程中每个程序员都可能用的到,为了支持可移植性和提高程序的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员进行软件开发。

 C语言的库函数还是很多哒,一般人记不住,也不需要都记住。

我们要学会查函数。

这个专栏第一期就介绍到了查阅的相关网站,这里以 cplusplus.com - C++资源网络 为例:

 搜索想查的函数,比如 strcpy 函数

 关键信息在顶端:

函数返回字符指针类型(括号外的 char*); 

第一个传参是字符指针类型,作为目的数组

第二个传参也是字符指针类型,作为来源的数组

注意:

使用库函数需要在开头引头文件:#include<>

2.2自定义函数

如果库函数能做所有的事情,那么还要程序员干什么?

更重要的就是自定义函数

自定义函数与库函数类似,也有函数名,返回值类型和函数参数

但是需要自己来设计,设计意味着很大的操作空间

函数组成:

 ret_type fun_name(para1, * )
{
    statement;//语句项
}
ret_type        返回类型
fun_name     函数名
para1            函数参数

这里举一个简单例子:

写一个函数找出最大值

int MAX(int x, int y)
{
	if (x > y)
	{
		return x;
	}
	if (x < y)
	{
		return y;
	}
}

int main()
{
	int a = 10;
	int b = 20;
	printf("%d\n", MAX(a, b));

	return 0;
}
//也可以用三目操作符:
int MAX(int x, int y)
{
	return (x > y ? x : y);
}

注意:

不能忘记主程序(main),否则无法完成任务; 

3.函数的参数

3.1实参

真实传给函数的参数,叫实参
实参可以是: 常量、变量、表达式、函数等;
无论实参是何种类型的量,在进行函数调用时,它们都 必须有确定的值,以便把这些值传送给形
参。

3.2形参

形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例(分配内存单元),所以叫形式参数。

形参再函数完成调用之后就被销毁了,因此形参只在函数内有效。

4.函数的调用

4.1传值调用

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

4.2传址调用

传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。
这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操
作函数外部的变量。

5.函数的嵌套调用和链式访问

函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。

5.1嵌套调用

看下面一段代码:
#include <stdio.h>
void new_line()
{
 printf("hehe\n");
}
void three_line()
{
    int i = 0;
 for(i=0; i<3; i++)
   {
        new_line();
   }
}
int main()
{
 three_line();
 return 0; }
 main 函数调用了 three_line 函数,three_line 函数中调用了 new_line 函数;
 这就是函数调用的例子。
注意:函数可以嵌套调用,但是不能嵌套定义。

5.2链式访问

链式访问是指 把一个函数的返回值作为另外一个函数的参数
#include <stdio.h>
int main()
{
    printf("%d", printf("%d", printf("%d", 43)));
    //注:printf函数的返回值是打印在屏幕上字符的个数
    return 0; 
}

像这样,连续调用了 3 个 printf 函数,把函数的返回值作为了另一个函数的参数,这就称为脸书访问。

6.函数的声明和定义

6.1函数的声明

函数的声明就是在函数使用之前告诉编译器有一个函数。

▪️ 函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了
▪️ 函数的声明一般出现在函数的使用之前。要满足先声明后使用
▪️ 函数的声明一般要放在头文件中的。

6.2函数定义

函数的定义是指函数的具体实现,交待函数的功能实现
test.h 内容:
//函数的声明
int Add(int x, int y);
test.c 的内容:
#include "test.h" //包含头文件
//函数Add的实现
int Add(int x, int y) {
 return x+y; }

总结:
这篇博客属于C语言初阶知识,函数的内容比较多,要好好消化吸收,本栏目下期着重介绍函数的递归(重难点)。

如果你觉得这篇文章还不错并且对你有帮助,不妨支持一波哦  💗💗💗

关注我  不迷路!!! 

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

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

相关文章

目标检测:YOLO V1 思想总结

目标检测&#xff1a;YOLO V1 思想总结YOLO V1Introduction&#xff08;模型介绍&#xff09;Network Design&#xff08;网络设计&#xff09;Backbone&#xff08;骨干网络&#xff09;Grid Cell&#xff08;单元格&#xff09;Loss Function&#xff08;损失函数&#xff09…

信息系统项目管理师考点之进度与成本常见计算

信息系统项目管理师考点之进度与成本常见计算总时差和自由时差区别PERT技术进度管理常见问题解决方案挣值分析成本控制主要工作内容参考链接总时差和自由时差区别 总时差 指一项工作在不影响总工期的前提下所具有的机动时间 总时差 LS - ES LF - EF 自由时差 指一项工作在不…

【STL标准库 范型编程】学习笔记(1):C++学习网站、STL六大部件介绍

目录 简介C++学习网站STL六大部件学习来源结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国…

YUTU

FE: Cortex-R4 处理器 第一个基于 ARMv7-R 体系结构的深层嵌入式实时处理器 BE : Cortex-M3处理器 基于 ARMv7-M体系结构 The YuTu SoC is a Flash memory controller chip, which provides a PCIe Gen 3x4 host interface and 4 channels (up to 8 CEs per channel) Flash in…

【自学C++】C++变量赋值

C变量赋值 C变量赋值教程 变量 的赋值就是给已经定义的变量进行重新设置值的过程&#xff0c;C 中变量的赋值可以单独为单个变量赋值&#xff0c;也可以同时为多个变量赋值。 C变量赋值详解 语法 varname1 value1;参数 参数描述varname1需要赋值的变量。value1需要给变量…

【MySQL系列】Java的JDBC编程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一、JCBD背景知识引入 二、安装MySQL数据库驱动包&#xff0c;并且导入到项目中 三、JDBC的使用 3.1 JDBC插入数据操作 3.2 JDBC修改数据操作…

哈希(C++)

C语言总结在这常见八大排序在这作者和朋友建立的社区&#xff1a;非科班转码社区-CSDN社区云&#x1f496;&#x1f49b;&#x1f499;期待hxd的支持哈&#x1f389;&#x1f389;&#x1f389;最后是打鸡血环节&#xff1a;想多了都是问题&#xff0c;做多了都是答案&#x1f…

计算机网络复习之运输层

文章目录ARQ协议停等式ARQ回退n帧的ARQ&#xff08;GBN&#xff09;选择性重传ARQ&#xff08;SR&#xff09;UDP协议TCP协议TCP协议的特点TCP报文段首部格式TCP连接管理TCP可靠传输TCP的流量控制TCP拥塞控制参考拥塞&#xff1a;若对网络中某一资源的需求超过了该资源所能提供…

Jenkins安装

Jenkins安装1、Jenkins简介2、Jenkins安装2.1 安装条件2.2 安装JDK2.2.1 检索可用包2.2.2 安装2.3 下载Jenkins的war包2.4 启动jenkins并测试3、安装maven1、Jenkins简介 Jenkins是一款开源 CI&CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件…

LeNet5—论文及源码阅读

LeNet5—论文及源码阅读&#x1f42c; 目录: 一、概论二、论文选读三、源码精读四、参考资料 一、概论 LeNet-5是一种经典的卷积神经网络结构&#xff0c;于1998年投入实际使用中。该网络最早应用于手写体字符识别应用中。普遍认为&#xff0c;卷积神经网络的出现开始于LeCu…

蓝牙Inquiry与Inquiry Scan

文章目录一、Inquiry和Inquiry Scan二、Inquiry的三种模式2.1 Inquiry命令2.2 标准Inquiry应答2.3 带RSSI的Inquiry应答2.4 带EIR的Inquiry应答三、Extend Inquiry Response3.1 EIR数据格式3.2 EIR数据注册3.3 EIR数据解析示例3.4 获取对端设备名称的方法四、Inquiry Scan参数一…

推荐系统入门学习(二)【小白入门系列】

搭建你的第一个推荐系统 初识推荐系统 最初的推荐系统&#xff0c;作用是过滤垃圾邮件。今日机器学习算法的发展&#xff0c;朴素贝叶斯、神经网络已然成为了过滤垃圾邮件的好手。但是在30年前&#xff0c;算法还没有如今使用得广泛的时候&#xff0c;“找相同”就成为了过滤…

大型网络游戏任务系统的架构与设计

在网路游戏中做任务已经成为游戏很重要的一个核心功能和玩法&#xff0c;如何做好一个灵活可扩展的任务系统的架构与设计&#xff0c;今天来给大家分享一些我们的设计经验。接下来我把整个的任务系统分成以下6个模块:任务配置表设计与管理;游戏任务的解锁与生成;任务完成判定;任…

将本地的word文档转为markdown(带图片)发布到CSDN

文章目录一、前言二、word转为markdown三、自动发布本地md文件一、前言 背景&#xff1a;早期很多学习笔记都是记在word上&#xff08;那一年&#xff0c;还不知道有markdown&#xff09;&#xff0c;现在想将早期的一些资料都发布到CSDN上&#xff08;本地学习资料我都懒得打…

数据中心灾备通用基础

1.灾备的定义 没有灾备会带来的问题 一旦数据中心的数据遭到破坏&#xff0c;随之而来的是很多棘手的问题 灾备可以提供全面数据保护 IT行业中的备份 在当今IT行业中&#xff0c;数据量急剧增长&#xff0c;并且新的法规不断出台&#xff0c;对备份时间、恢复时间目标&#…

Linux应用编程---4.pthread_create函数

Linux应用编程—4.pthread_create函数 ​ 之前学习了进程有关的东西&#xff0c;现在学习如何创建一个线程。 4.1 pthread_create()函数详情 ​ 线程创建函数是&#xff1a;pthread_create()。在Linux终端下&#xff0c;输入man pthread_create&#xff0c;查看函数定义以及…

Python基础(二十三):面向对象之继承介绍

文章目录 面向对象之继承介绍 一、继承的概念 二、单继承 三、多继承

IntelliJ IDEA安装教程(超详细)

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;实用工具 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又一…

Java学习(44)new关键字

new关键字 对象实例化 实例化对象的过程可以分为两部分&#xff1a; (1) 声明对象&#xff1a;Cat one (2) 实例化对象&#xff1a;new Cat()JVM可以被理解为Java程序与操作系统之间的桥梁 每次使用new关键字&#xff0c;就相当于在内存中开辟了一块新的存储空间。 package c…

CPU概述

CPU 概述 1. CPU 基础 CPU 的概念 CPU 是最重要的计算机组件&#xff0c;由控制器和运算器组成&#xff0c;通过总线与其它设备连接。 CPU 与南北桥 所谓的桥&#xff0c;都是 cpu 和其它设备连接这样的一个桥梁。分为南北桥。 什么是南桥&#xff1f; 南桥主要是用来连接…