C语言——函数专题
1.概念
在C语言中引入函数的概念,有些翻译为子程序。C语言中的函数就是一个完成某项特定任务的一小段代码,这个代码是有特殊的写法和调用方法的。一般我们可以分为两种函数:库函数和自定义函数。
2.库函数
C语言国际标准ANSIC规定了一些常用的函数的标准,被称为标准库,那不同的编译器厂商根据ANSIC提供的C语言标准就给出了一系列函数的实现。这些函数就被称为库函数。
在使用库函数时,我们可以借用网站来更好地运用各种函数。
3.自定义函数
自定义函数的形式如下:
ret_type fun_name(形式参数)
{}
在上述中:
1.ret_type 是函数的返回类型
2.fun_name 是函数名
3.括号中放的是形式参数
4.{}括起来的是函数体
3.1 函数的举例
写一个加法函数,完成2个整型变量的加法操作
int Add(int x, int y)
{return x + y;
}int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);int c = Add(a, b);printf("%d\n", c);return 0;
}
4.形参和实参
在函数使用的时候,我们把函数的参数分为实参和形参。
在函数定义的部分,函数名后边的参数,叫:形式参数,简称形参。
在调用函数时,真实传递给函数的参数,叫:实际参数,简称实参。
4.1 形参和实参的关系
通过对于代码的调试和运行结果的关系,我们可以看出,形参只是实参的一份临时拷贝。
5.return语句
在函数的设计中,经常会出现return语句,那么return语句的注意事项有:
1.return后边可以是数值,也可以是一个表达式。
2.return后边也可以什么都没有,直接写return。
3.如果return返回的值和函数返回类型不一样,系统会自动将返回的值隐式转换为函数的返回类型。
4.return语句执行后,函数就彻底返回,后面的代码不再执行。
5.如果函数中存在if等分支语句,则要保证在每种情况下都有return返回,否则会出现编译错误。
6.数组做函数参数
在使用函数解决问题时,难免会将数组作为函数传递给参数,在函数内部对数组进行操作。
例如:
void set_arr(int arr[10], int sz)
{int i = 0;for (i = 0; i < sz; i++){arr[i] = -1;}
}int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };int sz = sizeof(arr) / sizeof(arr[0]);//写一个函数将数组的内容全部置为-1set_arr(arr, sz);return 0;
}
注意:
1.数组在传参的时候,实参就写数组名就行,形参也是数组的形式。
2.实参和形参的名字是可以一样的,也可以不一样。
3.函数在设计的时候,尽可能功能单一。
4.数组在传参的时候,形参的数组和实参的数组是同一个数组。
5.形参如果是一维数组,数组大小可以省略不写;如果是二维数组,行可以省略,但是列不能省略。
7.嵌套调用和链式访问
7.1 嵌套调用
假设我们要计算某年某月有多少天?
int is_leap_year(int y)
{if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)return 1;elsereturn 0;
}int get_days_of_month(int y, int m)
{int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };int day = days[m];if (is_leap_year(y) && m == 2){day++;}return day;
}int main()
{int year = 0;int month = 0;scanf("%d %d", &year, &month);//计算int day = get_days_of_month(year, month);printf("%d\n", day);return 0;
}
7.2 链式访问
所谓的链式访问就是将一个函数的返回值作为另外一个函数的参数,像链条一样将函数串联起来就是函数的链式访问。
下面有一个有趣的例子:
int main()
{printf("%d", printf("%d", printf("%d", 43)));return 0;
}
我们可以猜一下结果应该是什么?
运行一下,我们可以看到——
那么为什么结果是这样的呢?
printf返回字符的个数。
8.函数的声明和定义
8.1 单个文件
//函数声明
#include<stdbool.h>
bool is_leap_year(int y);//或者可以写成——
//bool is_leap_year(int),即形参的名字可以不写//函数调用
int main()
{int year = 0;scanf("%d", &year);if (is_leap_year(year))printf("%d 是闰年\n", year);elseprintf("%d 不是闰年\n", year);return 0;
}
//函数定义bool is_leap_year(int y)
{if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0){return true;}elsereturn false;
}
8.2 多个文件
多个文件的使用在数据结构中和多代码的项目中运用较广泛。
8.3 static和extern
static是静态的 的意思,可以用来:
1.修饰局部变量
2.修饰全局变量
3.修饰函数
extern是用来声明外部符号的。
8.3.1 作用域和生命周期
作用域:是程序设计概念,通常来说,一段程序中代码所用到的名字并不是总是有效的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
:局部变量的作用域是变量所在的局部范围
:全局变量的作用域是整个工程
生命周期:指的是变量创建到变量销毁之间的一个时间段。
8.3.2 static修饰局部变量
编译器在编译代码时,就为静态变量分配了地址,而不是进入函数创建这种变量;
static修饰局部变量改变了变量的生命周期,生命周期改变的本质是改变了变量的存储类型,本来一个局部变量是在内存的栈区的,但是被static修饰后就存储到了静态区。存储静态区的变量和全局变量是一样的。
8.3.3 static修饰全局变量
全局变量默认是带有外部链接属性的,static修饰全局变量时,改变了全局变量的链接属性,使得外部链接属性变为内部的链接属性。
8.3.4 static修饰函数
函数有外部链接属性的,static修饰函数时,改变了函数的链接属性。
相关文章:
C语言——函数专题
1.概念 在C语言中引入函数的概念,有些翻译为子程序。C语言中的函数就是一个完成某项特定任务的一小段代码,这个代码是有特殊的写法和调用方法的。一般我们可以分为两种函数:库函数和自定义函数。 2.库函数 C语言国际标准ANSIC规定了一些常…...
springboot打可执行jar包
1. pom文件如下 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><m…...
【SQL】科目种类
目录 题目 分析 代码 题目 表: Teacher ------------------- | Column Name | Type | ------------------- | teacher_id | int | | subject_id | int | | dept_id | int | ------------------- 在 SQL 中,(subject_id, dept_id) 是该表的主键。 该表…...
【深度学习】【语音】TTS,最新TTS模型概览,扩散模型TTS,MeloTTS、StyleTTS2、Matcha-TTS
文章目录 基础介绍对比基础介绍 MeloTTS: MeloTTS 是 MyShell.ai 开发的一个多语言语音合成模型,支持包括英语、西班牙语、法语、中文、日语和韩语等多种语言。它以高质量的语音合成为特色,尤其擅长处理中英混合内容。该模型优化了在 CPU 上的实时推理能力,使其在多种应用场…...
【论文笔记】LION: Linear Group RNN for 3D Object Detection in Point Clouds
原文链接:https://arxiv.org/abs/2407.18232 简介:Transformer在3D点云感知任务中有二次复杂度,难以进行长距离关系建模。线性RNN则计算复杂度较低,适合进行长距离关系建模。本文提出基于窗口的网络线性组RNN(即对分组…...
打造高可用集群的基石:深度解析Keepalived实践与优化
高可用集群 集群类型 集群类型主要分为负载均衡集群(LB)、高可用集群(HA)和高性能计算集群(HPC)三大类。每种集群类型都有其特定的应用场景和优势。 1. 负载均衡集群(LB) 负载均衡集…...
Web大学生网页作业成品——环保主题介绍网页网站设计与实现(HTML+CSS)(5个页面)
🎉🎉🎉 常见网页设计作业题材有**汽车、环保、明星、文化、国家、抗疫、景点、人物、体育、植物、公益、图书、节日、游戏、商城、旅游、家乡、学校、电影、动漫、非遗、动物、个人、企业、美食、婚纱、其他**等网页设计题目, 可满足大学生网…...
Qt登录窗口设计
widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QIcon> //图标类 #include <QPushButton> #include <QLineEdit> //行编辑 #include <QLabel> #include <QTextEdit> #include <QMovie>class Widge…...
探索数据矿藏:我的AI大模型与数据挖掘实战经验分享
🚀 探索数据矿藏:我的AI大模型与数据挖掘实战经验分享 💖 前言:数据的金矿,AI的翅膀 在人工智能的浪潮中,我有幸作为项目负责人,带领团队深入挖掘数据的潜力,利用AI大模型的力量&am…...
linux C语言strcat函数及相关函数
讯飞星火 strcat函数是C语言中的一个字符串处理函数,用于将一个字符串追加到另一个字符串的末尾。它的原型如下: char *strcat(char *dest, const char *src);参数说明: dest:目标字符串,即要将src字符串追加到这个字符串的末尾。src:源字符串,即要追加到dest字符串末…...
使用 sort 进行文本文件处理
sort 使用经验笔记 一、简介 sort 是一个命令行工具,用于对文本文件中的行进行排序。它广泛应用于 Unix/Linux 系统中,可以用来对文件的内容进行简单的排序操作,也可以与其他命令结合使用来完成更复杂的任务。 二、基本用法 排序文件: sor…...
HarmonyOS笔记4:从云数据库获取数据
移动应用获取数据的方式主要有: 1.从网络中获取数据接口API。 2.从华为云数据库获取云数据库的资源。 3.从移动终端直接获取本地的数据 在HarmonyOS笔记3中已经完成了方式一从网络中获取数据接口API的方式。在本篇笔记中,将讨论从云数据库中获取数据。 因…...
QT5生成独立运行的exe文件
目录 1 生成独立运行的exe文件1.1 设置工程Release版本可执行文件存储路径1.2 将工程编译成Release版本 2 使用QT5自带的windeployqt拷贝软件运行依赖项3 将程序打包成一个独立的可执行软件exe4 解决QT5 This application failed to start because no Qt platform plugin could…...
LabVIEW光纤水听器闭环系统
开发了一种利用LabVIEW软件开发的干涉型光纤水听器闭环工作点控制系统。该系统通过调节光源频率和非平衡干涉仪的光程差,实现了工作点的精确控制,从而提高系统的稳定性和检测精度,避免了使用压电陶瓷,使操作更加简便。 项目背景 …...
Shell——流程控制语句(if、case、for、while等)
在 Shell 编程中,流程控制语句用于控制脚本的执行顺序和逻辑。这些语句包括 if、case、for、while 等,它们的使用可以使脚本实现更复杂的逻辑。以下是它们的详细说明和语法结构: 1. if 语句 if 语句用于条件判断,执行符合条件的…...
【redis的大key问题】
在使用 Redis 的过程中,如果未能及时发现并处理 Big keys(下文称为“大Key”),可能会导致服务性能下降、用户体验变差,甚至引发大面积故障。 本文将介绍大Key产生的原因、其可能引发的问题及如何快速找出大Key并将其优…...
HighPoint SSD7749M2:128TB NVMe 存储卡实现28 GB/s高速传输
HighPoint Technologies推出了一款全新的SSD7749M2 RAID卡,能够在标准的桌面工作站中安装多达16个M.2 SSD,实现高达128TB的闪存存储。该卡通过PCIe Gen4 x16接口提供高达28 GB/s的顺序读写性能。这些令人瞩目的性能规格伴随着高昂的价格标签。 #### 技术…...
ARM 裸机与 Linux 驱动对比及 Linux 内核入门
目录 ARM裸机代码和驱动的区别 Linux系统组成 内核五大功能 设备驱动分类 内核类型 驱动模块 驱动模块示例 Makefile配置 命令 编码辅助工具 内核中的打印函数 printk 函数 修改打印级别 编辑 打印级别含义 驱动多文件编译 示例 模块传递参数 命令行传递参数…...
0101DNS TCP fallback on UDP query timeout disabled-redission-中间件
文章目录 1.问题描述2.临时解决方案 结语 1.问题描述 Springcloud 项目,微服务模块使用redission,启动报错 DNS TCP fallback on UDP query timeout disabled. Upgrade Netty to 4.1.105 or higher.相关软件版本如下 软件版本描述springboot2.7.18spr…...
位运算
x1010 原码:000...1010 (一共32位) 反码:111...0101 (~x) 补码:111...0110 (反码1)(-x) 1、n 的二进制表示中第 k 位是几 #include<iost…...
Perplexity最新v2.4文档重大更新预警:3个已删除接口、2个强制迁移路径、1个即将下线的Auth Flow——错过今晚将无法兼容生产环境
更多请点击: https://intelliparadigm.com 第一章:Perplexity最新v2.4文档重大更新预警总览 Perplexity v2.4 文档体系迎来结构性升级,核心聚焦于开发者体验一致性、API 响应语义增强及本地化支持扩展。本次更新不再仅限于补丁式修订&#x…...
微信网页版访问终极指南:wechat-need-web插件完整教程
微信网页版访问终极指南:wechat-need-web插件完整教程 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为无法在浏览器中使用微信网页版…...
AI智能体长期记忆架构:构建Agent Shadow Brain解决上下文限制
1. 项目概述:当AI智能体拥有一个“影子大脑”最近在AI智能体开发领域,一个名为“Agent Shadow Brain”的项目引起了我的注意。这个项目由开发者theihtisham发起,其核心思想是为大型语言模型驱动的智能体配备一个独立的、持续运行的“影子大脑…...
从LLM到智能体:基于推理循环的AI应用开发框架解析
1. 项目概述:一个面向推理任务的智能体框架最近在探索如何让AI模型更“聪明”地处理复杂任务时,我注意到了GitHub上一个名为“zyron-reasoning”的项目。这个由kaiogs07维护的仓库,其核心定位是一个用于构建和运行“推理智能体”的框架。简单…...
深入PEX8796:从Serdes到Virtual Switch,图解PCIe交换芯片的三种工作模式
深入解析PEX8796:PCIe交换芯片的架构设计与模式创新 在高速数据传输领域,PCIe交换芯片如同交通枢纽般连接着计算系统的各个组件。作为PLX公司(现已被博通收购)的经典之作,PEX8796凭借其灵活的架构设计和多样化的操作模…...
Git 查看某个文件的修改记录
Git 查看某个文件的修改记录 git log – filename filename为全路径 git log – aa/bb/cc/dd/ee/ff.c...
YOLOv8树上自然生长的苹果识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置)
摘要 针对自然果园环境中苹果目标检测面临的光照变化、枝叶遮挡及果实密集等挑战,本研究基于YOLOv8目标检测算法构建了一套树上苹果检测系统。实验采用自建苹果图像数据集,包含训练集1355张、验证集77张、测试集39张,目标类别为单一“Apples…...
Python数据库编程与ORM
Python数据库编程与ORM一、数据库连接基础Python通过DB-API 2.0规范(PEP 249)统一了数据库接口。不同数据库使用不同的驱动,但API一致。import sqlite3# SQLite(内置,无需安装) conn sqlite3.connect(exam…...
Cursor AI计算器:无缝集成开发工作流的智能计算解决方案
1. 项目概述:一个为开发者量身定制的光标计算器最近在GitHub上看到一个挺有意思的项目,叫kingdomseed/cursor-calculator。光看名字,你可能会想,这不就是个计算器吗?有什么好说的。但如果你是一个深度依赖代码编辑器&a…...
热门的牙齿矫正正畸李杨哪个好
在社交媒体上,关于“牙齿矫正哪家好”、“李杨医生靠谱吗”的讨论热度居高不下。许多粉丝在评论区留言,想知道这位在网络红人榜上经常出现的正畸专家,是否真的值得托付那长达一两年的矫正周期。作为一个长期关注口腔健康领域的观察者…...
