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

函数

1、概述

1.1、函数分类

1)系统函数(库函数)

2)用户定义函数

1.2、函数的作用
  • 降低代码重复率
  • 让程序更加模块化,利于阅读、修改和完善
1.3、函数的调用:随机数

函数调用 5 要素:

  • 头文件:包含指定的头文件
  • 函数名字:函数名字必须与头文件声明的名字一样
  • 功能:要知道函数实现的功能
  • 参数:参数类型要匹配
  • 返回值:根据需要接收返回值
#include<time.h>
time_t time(time_t *t);
//功能:获取系统当前时间
//参数:常设置为NULL
//返回值:当前系统时间,time_t 相当于 long 类型,单位为毫秒# include<stdlib.h>
void srand(unsigned int seed);
//功能:用来产生 rand() 函数产生随机数时的随机种子
//参数:如果每次 seed 相同,rand() 产生的随机数相同
//返回值:无# include<stdlib.h>
int rand(void);
//功能:返回一个随机数
//参数:无
//返回值:随机数
#include<time.h>
# include<stdlib.h>
# include<stddio.h>
//双色球	6个红球,1-32,不可重复		1个蓝球,1-16,可以和红球号码重复
int arr[7]={0};
srand((unsigned int)time(NULL));
int value=0;
int flag=0;
int j;
for(int i=0;i<6;i++)
{value=rand()%32+1;//去重for(j=0;j<flag;j++){if(value==arr[j]){i--;break;} }if(j==flag){arr[flag]=value;flag++;}}
arr[7]=rand()%16+1;

2、函数的定义

2.1、函数的定义格式
返回类型 函数名(形式参数列表)
{函数体(数据定义部分,执行语句部分)
}
//函数定义
int add(int a,int b)
{int sum=a+b;return sum;
}int main()
{int a=10;int b=20;//函数调用int res=add(a,b);return 0;
}
  • 在不同函数中的可以有相同的变量名,因为作用域不同;
  • 在函数调用过程中,传递的参数称为实参(实际参数),有具体的值;
  • 在函数定义过程中的参数称为形参(形式参数),只有类型,没有具体的值;
  • 在函数调用过程中,将实参传递给形参;
  • 在函数调用结束,函数相关的内存会在栈区自动销毁。
2.2、函数名、形参、实参、返回值

1)函数名:见名知意

2)形参列表:在函数没有被调用时,形参不占用内存中的存储单元

  • 在定义函数时指定的形参,可有可无,根据函数的需要来设计,如果没有形参,括号内为空,或者写一个 void 关键字

3)函数体:函数功能实现的过程

4)返回值:通过函数中的 return 语句获得,return 后面的值也可以是一个表达式

  • 尽量保证 return 中的数据类型和函数的返回类型一致
  • 如果函数返回的数据类型和函数返回类型不一致,则以函数返回类型为准,对于数值类型,会自动进行数据类型转换

3、函数的调用

3.1、函数的执行流程

1)进入 main() 函数

2)调用自定义函数

3)自定义函数执行完,main() 会继续往下执行,直到执行 return 0,程序执行完毕

3.2、函数的形参和实参
  • 形参出现在函数定义中,在整个函数体中都可以使用,离开函数则不能使用;
  • 实参出现在主调函数中,进入被调函数后,实参也不能使用;
  • 实参变量对形参变量的数据传递是单向的值传递,只能由实参传递给形参,而不能由形参传递给实参;
  • 再调用函数时,编译系统临时给形参分配存储单元。调用结束后,形参单元被释放;
  • 形参与实参在内存中存放在不同的存储单元。在执行一个调用过程中,形参的值发生改变,不会影响实参的值。
//字符串比较,相同返回0,不同返回 1 或者 -1
int strcmp(char ch1[],char ch2[])
{int i=0;while(ch1[i]==ch2[i]){//是否到字符串结尾if(ch1[i]=='\0'){return 0;}i++;}return ch1[i]>ch2[i]?1:-1;
}

4、函数样式

4.1、无参函数
  • 无参函数调用,直接函数名后跟括号即可
//无参函数
void func1()
{printf("Hello\n");
}int func2()
{return rand()%10;
}int main()
{func1;srand((unsigned int)time(NULL));int randNum=func2();return 0;
}
4.2、有参函数

1)如果实参列表包含多个实参,则各参数间用逗号隔开;

2)实参与形参应该个数相等,类型匹配(相同或者赋值类型兼容),按顺序对应;

3)实参可以是常量、变量、表达式,无论实参是何种类型的量,在进行函数的调用时,他们应该具有确定的值。

//有参函数
//冒泡排序函数
void bubbleSort(int arr[],int len)
{for(int i=0;i<len-1;i++){for(int j=0lj<len-1-i;j++){if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}return;		//无返回值,return可写可不写
}int main()
{int arr[]={9,1,7,4,2,10,3,8,6,5};bubbleSort(arr,sizeof(arr)/sizeof(arr[0]));return 0;}

5、函数的返回值

  • 如果函数定义没有返回值,函数调用时不能写 void 关键字,调用函数时也不能接收函数的返回值;
  • void,空类型:void 类型不可以直接定义数据,但可以作为函数的返回值类型,表示没有返回值;

6、函数的声明

自定义函数三个过程:

  • 函数声明;
  • 函数定义;
  • 函数调用

当函数定义在主函数之前,可以直接定义,不比声明;但是当函数定义在主函数之后,就必须在主函数之前声明函数。

//函数声明
extern int add(int a,int b);
//在同一个文件中进行声明和定义,函数声明的时候可以省略 extern
int add(int a,int b);
//还可以省略形参的参数名
int add(int, int );int main()
{//函数调用add(10,20);return 0;
}//函数定义
int add(int a,int b)
{return a+b;
}
  • 在一个程序中,函数只能定义一次,但是可以声明多次,调用多次;
  • 函数声明时,可以省略形参的名称,只需要说明形参的类型即可。

7、主函数和 exit 函数

1)exit() 函数

  • 功能:终止程序执行;
  • 参数:整型,就是函数中止执行之后返回的错误码
exit(0);
  • 在主函数中,exit(0) 和 return 0 效果一样;但是在子函数中,调用 return 只是代表子函数中终止了,在子函数中调用 exit ,那么程序就终止了。

8、多文件编程

8.1、分文件编程(多文件编程)
  • 把函数声明放在头文件 xxx.h 中,在主函数中包含相应的头文件
  • 在头文件对应的 xxx.c 中实现 xxx.h 声明的函数

01main.c

#include<stdio.h>
#include"02func.h"int main()
{int a = 10;int b = 20;int res = maxValue(a, b);printf("%d\n", res);return 0;
}

02func.c

#include"02func.h"
//函数定义
int maxValue(int a, int b)
{return a > b ? a : b;
}

02func.h

#pragma once	// 防止头文件重复包含
//#ifndef __02_FUNC_H__
//#define __02_FUNC_H__//全局变量的定义		
//函数的声明
//extern int maxValue(int a, int b);
int maxValue(int a, int b);
//int maxValue(int,int);
8.2、防止头文件重复包含
  • 为避免同一个头文件被包含多次,C/C++中有两种方式:
    • #ifndef 方式;
    • #pragma 方式

相关文章:

函数

1、概述 1.1、函数分类 1&#xff09;系统函数&#xff08;库函数&#xff09; 2&#xff09;用户定义函数 1.2、函数的作用 降低代码重复率让程序更加模块化&#xff0c;利于阅读、修改和完善 1.3、函数的调用&#xff1a;随机数 函数调用 5 要素&#xff1a; 头文件&…...

第四周:机器学习知识点回顾

前言&#xff1a; 讲真&#xff0c;复习这块我是比较头大的&#xff0c;之前的线代、高数、概率论、西瓜书、樱花书、NG的系列课程、李宏毅李沐等等等等…那可是花了三年学习佳实践下来的&#xff0c;现在一想脑子里就剩下几个名词就觉得废柴一个了&#xff0c;朋友们有没有同感…...

韩版传奇 2 源码分析与 Unity 重制(一)服务端 TCP 状态管理

专题介绍 该专题将会分析 LOMCN 基于韩版传奇 2,使用 .NET 重写的传奇源码(服务端 + 客户端),分析数据交互、状态管理和客户端渲染等技术,此外笔者还会分享将客户端部分移植到 Unity 和服务端用现代编程语言重写的全过程。 相关资料 官方论坛: https://www.lomcn.org/fo…...

python编程(2)之灯光秀的按钮

今天小编带领大家开始学习python编程的第二节&#xff0c;灯关秀的按钮。 按键在后续的学习和开发过程中&#xff0c;都是很重要的内容&#xff0c;是帮助我们获取外界信息的基础通道&#xff0c;识别按键的方式&#xff0c;在上节的内容给大家介绍了&#xff0c;大家可以进行学…...

pandas将dataframe列中的list转换为多列

在应用机器学习的过程中&#xff0c;很大一部分工作都是在做数据的处理&#xff0c;一个非常常见的场景就是将一个list序列的特征数据拆成多个单独的特征数据。 比如数据集如下所示&#xff1a; data [[John, 25, Male,[99,100,98]],[Emily, 22, Female,[97,99,98]],[Michae…...

小巧的Windows Memory Cleaner内存清理工具-释放内存,提升电脑的性能-供大家学习研究参考

软件介绍 Windows Memory Cleaner是一款非常不错的内存清理工具大小仅200KB&#xff0c;这款免费的 RAM 清理器使用本机 Windows 功能来清理内存区域&#xff0c;帮助用户释放内存&#xff0c;提升电脑的性能&#xff0c;有时程序不会释放分配的内存&#xff0c;从而使计算机变…...

STM32F072 CAN and USB

1 通用描述 1.1 STM8 MOSTek 6502 -> ST7 -> STM8 STM8型号单片机分为STM8A、STM8L、STM8S三个系列。 STM8A&#xff1a;汽车级应用 STM8L&#xff1a;超低功耗MCU STM8S&#xff1a;标准系列 1.2 STM32 - F1系列用的最多&#xff0c;最大工作频率72MHz - STM32固件库&am…...

卷积神经网络基础与补充

参考自 up主的b站链接&#xff1a;霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频这位大佬的博客 https://blog.csdn.net/m0_37867091?typeblog CNN的历史发展&#xff1a; 这一点老师上课的时候也有讲到&#xff0c;BP的出现对CNN的发展至关重要 卷积的特性&#x…...

File Inclusion(Pikachu)

File Inclusion(local) 这里随便点击一个提交 观察url&#xff0c;显示是一个文件file1.php 可以直接通过url修改这个文件 找到自己的文件&#xff08;本地文件&#xff09;shell.php的路径写上去 就可以看到 File Inclusion&#xff08;remote&#xff09; 提交的是一个目标…...

【Redis刨析】知识图谱的构建与实现

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言引用构建过程Redis的知识图谱构建过程Redis介绍快的原因持久化 引用 对于编程的学习&#xff0c;过了初级阶段&#xff0c;我认为应该减少对视频的依赖&am…...

html学习笔记 标题、段落、换行、列表、超链接、图片、表格

<h1></h1> <p></p> <br>换行&#xff0c;不带线 <hr>换行&#xff0c;带线列表 类似↓ 2 1 无序列表 <ul><li></li><li></li><li></li> </ul>有序列表 <oi><li></l…...

汽车项目管理

项目节点&#xff1a; MR (Management Review)——管理层评审 KO (Kick Off)——项目正式启动 SI (Strategy Intent)——战略意图 SC (Strategy Confirmation)——战略确认 PA (Program Approval)——项目批准 PR (Product Readiness)——产品就绪 VP (Verification Prototype)…...

Tg-5511cb: tcxo高稳定性+105℃高温

爱普生推的一款TG-5511CB是一种高稳定的TCXO温补晶体振荡器&#xff0c;频率范围十分广泛从 10mhz ~ 54mhz&#xff0c;它的电源电压只需要3.3V&#xff0c;无论是手机还是其他电子设备&#xff0c;都能轻松提供稳定的电力支持。频率/温度特性表现出色&#xff0c;0.28 10^6Ma…...

Linux 命令 ifconfig 全面解析!

ifconfig 是 network interfaces configuring 的缩写。 在 Linux 操作系统中&#xff0c;ifconfig 用于显示或配置网络设备的参数信息。 查看网卡信息 $ ifconfig # 显示激活状态&#xff08;up 状态&#xff09;的网卡信息 eth0 Link encap:Ethernet HWaddr 00:0c:29:75:8…...

00-Git 应用

Git 应用 一、Git概述 1.1 什么是Git git 是一个代码协同管理工具&#xff0c;也称之为代码版本控制工具&#xff0c;代码版本控制或管理的工具用的最多的&#xff1a; svn、 git。 SVN 是采用的 同步机制&#xff0c;即本地的代码版本和服务器的版本保持一致&#xff08;提…...

安全运维是做什么的,主要工作内容是什么

安全运维&#xff0c;简称SecOps&#xff0c;是一种集成安全措施和流程到信息技术运维的实践。它的目的是确保在日常运维活动中&#xff0c;如网络管理、系统维护、软件更新等&#xff0c;均考虑并融入安全策略。安全运维的核心是实现安全和运维团队的密切协作&#xff0c;以快…...

nodejs+vue+ElementUi大学新生入学系统的设计与实现1hme0

采用B/S模式架构系统&#xff0c;开发简单&#xff0c;只需要连接网络即可登录本系统&#xff0c;不需要安装任何客户端。开发工具采用VSCode&#xff0c;前端采用VueElementUI&#xff0c;后端采用Node.js&#xff0c;数据库采用MySQL。 涉及的技术栈 1&#xff09; 前台页面…...

Unity-序列化和反序列化

序列化是指把对象转换为字节序列的过程,而反序列化是指把字节序列恢复为对象的过程。序列化最主要的用途就是传递对象和保存对象。 在Unity中保存和加载、prefab、scene、Inspector窗口、实例化预制体等都使用了序列化与反序列化。 1 可序列化类型 1> 自定义的具有Serial…...

如何将语音版大模型AI接入自己的项目里(语音ChatGPT)

如何将语音版大模型AI接入自己的项目里语音ChatGPT 一、语音版大模型AI二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例5、智能生成API代码 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、语音版大模型AI 基于阿里通义千问、百…...

鸿蒙列表,item组件封装传参问题?@ObjectLink 和@Observerd

鸿蒙列表渲染&#xff0c;封装内容组件&#xff0c;进行item传参会报错&#xff1f; class FoodClass {order_id: number 0food_name: string ""food_price: number 0food_count: number 0 }Entry Component struct Demo07 {State message: string Hello World…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

Appium下载安装配置保姆教程(图文详解)

目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...