C_03 函数学习

news2024/9/22 15:50:43

函数

优点:

  • 降低代码耦合度
  • 降低代码冗余度
  • 提高代码复用率
  • 提高代码可读性

思想:

封装【包装】

声明:

语法:

extern 函数名(形参列表);
	// 注意:
 			此时 形参列表中变量名可以忽略不写;

定义:

语法:

返回值类型  函数名(形参列表)
{
	 函数体;
}

返回值类型 : 返回值的数据类型   如果没有返回值 写 void (NULL)
函数名:     是标识符 自定义
形参列表:   声明或者定义的多个变量  使用逗号 隔开  可有可无
函数体:     封装的代码 

	return : 结束当前函数。
	return 后跟值或者变量 : 结束当前函数并返回该值或变量,此时这个值或变量就是返回值。
						一个函数只能有一个返回值。
 定义位置:函数外
				注意:
					c语言中同一个程序中不能出现两个或两个以上函数名相同的函数

调用:

语法:

通用
	 	函数名 (实参列表); 
调用有返回值的:
		 变量名 = 函数名(实参列表);

注意:
		实参列表要与形参列表一致(长度一致,顺序一致,数据类型一致)

								调用位置:函数中

定义与调用的关系

  • 先定义再调用,

  • 定义只需要一次 但是可以调用无数次。

  • 可以调用被人或系统定义好的函数

分类

系统调用:
可以直接操作内核的函数

库函数:

​ 由系统提供的函数称为库函数,printf () 、 scanf() 、 rand() …

自定义函数:

​ 自己定义的函数。

分步学习

思路:

当不知道需要什么参数时 先写void 写逻辑的时候 要是 参数不能自己提供 就去写形参 接收

> 1 自定义无参无返回值的函数并调用

   举例:  定义一个函数计算5的阶乘
 // 定义: 
    void jiecheng()
      {
         int num = 1;    //这里可以自己提供
         for(int i =1 ; i < 6; i++){
         num *= i;
        }
        printf("%d5的阶乘为\n",num);
      }
  //调用:
   jiecheng();

> 2  自定义有参无返

    void func(int x)
    {
    for(int i = 1; i < x+1; i++)
       num *= i;
    }
    printf("%d的阶乘为%d\n",x,num);
}



> 3  自定义无参有返回
   // 定义一个函数 生成一个大写字母
     char toUpper()
   {
       int x = rand()%26+65;
       char y = (char)x;
       return y;
   }
  char zimu = toUpper();
  cout<< zimu <<endl;

> 4  自定义有参有返回
void jecheng()
{
  int num =1 ;
  for(int i = 1;i <= x; i++)
  {
      num *= i;
  }
    return num;
} 

特殊情况:

多重调用:

  • 函数A中调用函数B 函数B调用函数c …

递归:

  • 函数本身调用本身,称为递归

递归

这样的写法就称为 递归 但是缺点是会引起 死循环

可以避免:【可以给增加限制条件 来限制能调用自己的情况出现】

避免递归出现

多文件编程

  	 gcc 要编译的所有的源文件名 -o 生成的可执行文件名
注意:
  • 多个源文件之间使用空格隔开
  • 无需编译头文件

头文件:

  • 对应的源文件的声明文件
  • 头文件名与源文件名一致,以.h结尾
  • 头文件中可以书写c语言代码
#include <stdio.h>
#include "hello.h"

​ " " 表示现在当前目录下寻找,如果没有再去系统路径下寻找

​ <>:直接去系统路径下寻找

变量存储

内存的分区

相关知识

进程:可执行文件从运行到结束整个动态的过程就叫进程。(占内存空间)

  						在32位平台每一个进程占4G空间(虚拟空间)

  						从0 x 00 00 00 00 至 0 x ff ff ff ff

内存图解

局部变量

定义位置: 函数中

定义语法: 数据类型 变量名;

默认值: 随机数

存储区域: 栈中

作用域:局部变量所定义的代码块中可用,同一个作用域下变量名不能相同

生命周期:随着所在函数的调用而生成,随着所在函数执行结束而销毁

全局变量

定义位置: 函数外

定义语法: 数据类型 变量名;

默认值: 0

存储区域: 全局区

作用域:当前程序中

生命周期:随着程序启动而生成,随着所在程序销毁而释放

静态局部变量

定义位置:函数中

定义的语法:static 数据类型 变量名 = 值;

默认值: 0

static int x;  		// 初始值 不再是 使用auto修饰的随机数  而是0

作用范围:只在语句中有效

生命周期: 随着所在函数的第一次调用而启用,随着程序结束而销毁

内存区域:全局区

静态全局变量

定义位置:函数外

语法:static 数据类型 变量名;

默认值:0

存储区域:全局区

作用域:当前文件中 只能在当前文件使用

生命周期:随着所在程序的启动生成,随着所在程序的执行完毕而销毁

const修饰的变量

特点: 使用const修改后的变量 , 只能赋值一次,并称为常量 【通常使用大写】

语法:

const 数据类型 变量名 = 值;

​ 后面再使用此变量不能再赋值了

提示图

全局函数与静态函数

全局函数:

普通的函数

可以在当前程序中任何一处使用

语法:

static 返回值类型 函数名(形参列表)  
{
  函数体;
}

静态函数

使用 static 修饰的全局函数

限制: 只能在当前文件中使用

语法:

static 返回值类型 函数名(形参列表)  
{
    函数体;
}

全局函数与静态函数

全局函数:

普通的函数

可以在当前程序中任何一处使用

语法:

static 返回值类型 函数名(形参列表)  
{
  函数体;
}

静态函数

使用 static 修饰的全局函数

限制: 只能在当前文件中使用
语法:

static 返回值类型 函数名(形参列表)  
{
    函数体;
}

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

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

相关文章

2024.8.26

一、对于第三模态加入对于模型性能的影响 yes/no other num 尝试通过 1、删去第一次反向传播时第三模态的梯度更新 &#xff08;1&#xff09;第三次反向传播会再进行一次更新 &#xff08;2&#xff09;阻止模型频繁的学习训练样本 2、取消第三模态共享头部更新时的权重修正&…

Vue.js实战教程:如何一步步构建HSK在线学习平台

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

3ds Max 2025新增功能、安装教程及下载

3ds Max 2025 引入了一些新的功能和改进&#xff0c;提升了建模、动画和渲染的效率&#xff1a; 增强的建模工具&#xff1a;增加了新的多边形建模和修改器工具&#xff0c;支持更复杂的几何形状和更高效的建模流程。 改进的材质和渲染&#xff1a;引入了新的材质类型和改进的…

05.C++类和对象(下)

1.再探构造函数 • 之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有一种方式&#xff0c;就是初始化列表&#xff0c;初始化列表的使用方式是以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员列表&#xff0c…

基于springboot+vue+uniapp的短文写作竞赛管理系统小程序

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

Maven的配置文件pom.xml标签详解(含常用plugin)

一、什么是pom.xml pom.xml是Maven项目的核心配置文件&#xff0c;它是 项目对象模型 - Project Object Model&#xff08;POM&#xff09; 的缩写。POM定义了项目的所有属性&#xff0c;包括项目的名称、版本、依赖关系、构建配置等。使用pom.xml&#xff0c;我们可以轻松地管…

pwm子系统

一、系统框架 内核的PWM core&#xff0c;向下对实际pwm控制器驱动&#xff0c;提供了pwm_chip,soc厂商编程控制器驱动&#xff0c;只需注册结构体&#xff0c;配置好private_data&#xff0c;实例化pwm_ops操作&#xff0c;编写具体函数即可。 向上为其他驱动调用提供了统一的…

【Toyota】 Avalon

文章目录 1、外观2、内饰3、2024 款配置对比2024 2.0L CVT 进取版 vs 2024 2.0L CVT 臻选版2024 2.0L CVT 臻选版 vs 2024 2.0L CVT 豪华版2024 2.0L CVT 臻选版 vs 2024 智能电混双擎 2.0L E-CVT 臻选版 &#xff08;纯油 vs 油电混&#xff09;2024 智能电混双擎 2.0L E-CVT …

appium学习记录

免责声明 本文内容仅供参考&#xff0c;将appuim与爬虫技术相结合可能违反某些app的使用条款和法律法规。作者不对因此产生的法律问题或技术风险负责。建议读者在进行爬取操作前&#xff0c;充分了解相关法律法规并确保合规。 1、初识appium 背景&#xff1a;部分APP需要反编译…

云计算第二阶段---DBA Day05-DAY07

DBA Day05 这周的内容涉及到的是各类数据库的服务配置与数据的备份与恢复操作. 环境准备: 设置 ip 地址 和主机名 安装mysql,mysql-server --->启动 yum -y install mysql mysql-server #装mysql环境包 systemclt start mysqld #启动服务 exit …

hackit 2018

源代码 const express require(express) var hbs require(hbs); var bodyParser require(body-parser); const md5 require(md5); var morganBody require(morgan-body); const app express(); var user []; //empty for nowvar matrix []; for (var i 0; i < 3; …

PySide6入门教程之六 | Main Window、Widge、Dtialog三大类型窗口的使用

前言 PySide6 是用于Python的一个跨平台GUI库&#xff0c;它提供了Qt框架的Python绑定。在PySide6中&#xff0c;QMainWindow,QWidget, 和 QDialog 都是非常常用的类&#xff0c;它们各自有特定的应用场景和功能。 &#x1f680;&#x1f680;&#x1f680; Pyside6实战教程专…

存储与传输/大小端字节序的概念、决定因素、给编程带来的困扰

文章目录 概述大小端分歧的类比为什么要关注字节序NET网络字节序什么时候必须转换字节序大小端字节序哪个优秀判断系统字节序类型字节序类型转换大小端内存监视和调试 谁决定了大小端模式CPU架构决定大小端操作系统影响大小端&#xff1f;编译器也影响大小端&#xff1f;可配置…

kafka发送消息-分区策略(消息发送到哪个分区中?是什么策略)

生产者发送消息的分区策略&#xff08;消息发送到哪个分区中&#xff1f;是什么策略&#xff09; 1、默认策略&#xff0c;程序自动计算并指定分区1.1、指定key&#xff0c;不指定分区1.2、不指定key&#xff0c;不指定分区 2、轮询分配策略RoundRobinPartitioner2.1、创建配置…

3.4-CoroutineScope/CoroutineContext:coroutineScope() 和 supervisorScope()

文章目录 coroutineScope()supervisorScope()总结 coroutineScope() coroutineScope() 和我们创建协程时的 CoroutineScope 名字是相同的&#xff0c;实际上它们也确实有所关联&#xff0c;为了方便理解我们先说下 coroutineScope() 是怎样的效果。 我们在使用 coroutineScop…

PPT分享:某集团公司供应链-销售与运营计划SOP

今天笔者给大家带来的是“供应链中的S&OP”&#xff0c;在分享PPT之前&#xff0c;咱们先了解下什么是“S&OP”。PPT下载链接见文末~ 供应链中的S&OP&#xff0c;全称为Sales and Operations Planning&#xff0c;即销售与运营计划&#xff0c;是一种跨职能的决策…

【Unity】移动端草海解决方案

草海是开放大世界渲染的必不可少的因素&#xff0c;Unity 原生的 Terrain 草海效率较低&#xff0c;而且无法与 RVT 结合起来&#xff0c;无法在移动端上实现。因此我们自己搓出来一套草海系统&#xff0c;使用 C# 多线程辅助运算&#xff0c;并能支持割草、烧草等进阶玩法。草…

springboot嵌入式数据库实践-H2内嵌数据库(文件、内存)

本文章记录笔者的嵌入式数据库简单实现&#xff0c; 记录简要的配置过程。自用文章&#xff0c;仅作参考。 目录 本文章记录笔者的嵌入式数据库简单实现&#xff0c; 记录简要的配置过程。自用文章&#xff0c;仅作参考。 嵌入式数据库 -------------------------------具…

数学基础(八)

一、假设检验 什么是假设&#xff1a; 对总体参数&#xff08;均值、比例等&#xff09;的具体数值所作的陈述。 什么是假设检验&#xff1a; 先对总体的参数提出某种假设&#xff0c;然后利用样本的信息判断假设是否成立的过程 假设检验的应用&#xff1a; 推广新的教育…

【C++ Primer Plus习题】4.10

问题: 解答: #include <iostream> #include <array> using namespace std;int main() {array<float, 3> grade;float average0;for (int i 0; i < 3; i){cout << "请输入第" << i 1 << "次跑40米的成绩:";cin &…