C_03_函数学习

函数

优点:

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

思想:

封装【包装】

声明:

语法:

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.mzph.cn/web/51453.shtml

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

相关文章

47.【C语言】指针(重难点)(J)

目录 26.自制排序函数(★★) *分析 *代码 往期推荐 26.自制排序函数 *分析 之前在42.【C语言】冒泡排序写过一个排序函数&#xff0c;可以将此自制一个类似qsort的函数 画圈的地方是需要修改的 #include <stddef.h> void bubble_sort(void* base, size_t num,size_t w…

面试被面试官问:3D目标检测预处理优化策略有哪些?

01 前言&#xff1a; 3D目标检测是计算机视觉领域中一个重要的任务&#xff0c;广泛应用于自动驾驶、机器人导航、无人机等领域。由于3D数据的复杂性和多样性&#xff0c;数据预处理在3D目标检测中扮演着关键角色。良好的预处理策略不仅可以提升模型的检测精度&#xff0c;还可…

并发知识笔记

一、使用线程持有变量获取线程执行结果 /*** 线程持有变量*/private static final ThreadLocal<Map<String, Object>> MAP_THREAD_LOCAL ThreadLocal.withInitial(HashMap::new);// ----------------------------------------------------------------正文int dat…

Day1:88. 合并两个有序数组、27.移除元素、26.删除有序数组中的重复项

此次挑战的是leetcode面试150题&#xff0c;每天刷三题&#xff0c;争取一小时内结束。 88. 合并两个有序数组 思路直接想到&#xff0c;双指针&#xff0c;从后往前放&#xff08;避免数组移动&#xff09;&#xff0c;但是没有考虑到nums1结束了&#xff0c; nums2还没结束…

Flat Ads:全球金融应用的营销投放洞察

随着移动互联网的普及,金融应用在全球范围内迅速崛起。无论是移动银行、支付服务,还是理财工具,金融类应用已经成为现代生活中不可或缺的一部分。根据最新的行业报告,全球金融应用的下载量和用户活跃度在过去几年里持续增长,尤其是在新兴市场,用户对数字金融服务的需求不断攀升…

力扣top100-链表类题易错点总结-c++实现(更新中)

首先给一个我之前写的双指针在链表类题中的妙用的link&#xff1a;双指针在链表中的妙用 tip1 来自“合并两个有序链表” 题目链接戳这里 这道题注意的就是如果是要返回一个新链表的头结点&#xff0c;一定要新建一个头结点&#xff1a; ListNode* prehead new ListNode…

java框架第二课(Reflection反射机制)

一.关于反射 (1)使用场景介绍 平常我们写代码时&#xff0c;都是已知类名&#xff0c;类的属性&#xff0c;构造方法&#xff0c;其他方法等信息&#xff0c;然后根据类名new对象&#xff0c;这个过程称为正向操作(例如&#xff1a;有一个管理员类&#xff0c;有账号和密码属…

【SQL】三角形判断

目录 题目 分析 代码 题目 表: Triangle ------------------- | Column Name | Type | ------------------- | x | int | | y | int | | z | int | ------------------- 在 SQL 中&#xff0c;(x, y, z)是该表的主键列。 该表的每一行包…

Sigmoid 函数及其导数推导

Sigmoid 函数及其导数推导 1. 了解 Sigmoid 函数 Sigmoid 函数是神经网络中常用的激活函数&#xff0c;因其平滑的S形曲线和将输入压缩至 (0, 1) 的特性&#xff0c;在神经网络的激活函数中扮演着重要角色。其定义如下&#xff1a; σ ( x ) 1 1 e − x \sigma(x) \frac{1…

FunASR自动语音识别的创新平台

1. 什么是自动语音识别&#xff08;ASR&#xff09; 自动语音识别&#xff08;ASR, Automatic Speech Recognition&#xff09;是一种将语音信号转换为文本的技术。随着语音助手、智能家居、翻译系统等应用的兴起&#xff0c;ASR技术的重要性日益凸显。传统的ASR系统依赖于复杂…

操作系统线程属性

线程属性 int pthread_create (pthread_t* restrict thread,const pthread_attr_t* restrict attr,void* (*start_routine) (void*),void* restrict arg); ​ //创建线程函数的第二个参数即为线程属性&#xff0c;传空指针表示使用缺省属性。 typedef struct {// 分离状态int …

【应用开发】解决正点原子I.MX6ull应用编程zlib移植问题

问题描述 在正点原子应用开发移植zlib库的时候&#xff0c;文档中有这样一段描述&#xff0c;先删除开发板中的zlib库&#xff0c;然后再拷贝zlib库 这就会导致在使用scp命令拷贝编译好的zlib库的时候报错没有zlib.so.1&#xff0c;如下图所示&#xff1a; 解决方法 千万不…

《算法竞赛进阶指南》0x27A*

如果给定一个“目标状态”&#xff0c;需要求出从初态到目标状态的最小代价&#xff0c;那么优先队列BFS的“优先策略”显然不完善。一个状态的当前代价最小&#xff0c;只能说明从起始状态到当前状态得到代价很小&#xff0c;而在未来的搜索中&#xff0c;从该状态到目标状态可…

安卓好软-----手机端提取apk的小工具 方便简单 无需root权限

apk提取工具 工具小巧。可以提取手机上面当前安装的apk和系统应用apk。而且无需root权限即可正常使用。 效果非常不错。比其他工具提取系统app方便好使。 下载&#xff1a;https://download.csdn.net/download/mg668/89683199?spm1001.2014.3001.5503

探索贪心算法:解决优化问题的高效策略

贪心算法是一种在每一步选择中都采取当前最佳选择的算法&#xff0c;以期在整体上达到最优解。它广泛应用于各种优化问题&#xff0c;如最短路径、最小生成树、活动选择等。本文将介绍贪心算法的基本概念、特点、应用场景及其局限性。 贪心算法的基本概念 贪心算法的核心思想是…

详解ACL限制SSH、Telnet远程登录及抓包实验

要求&#xff1a;lsw5只能lsw6登录&#xff0c;lsw6只能PC2登录 <Huawei>sys [Huawei]sysname sw2 [sw2]int vlanif1 [sw2-Vlanif1]ip address 192.168.10.2 24 [sw2-Vlanif1]q [sw2] <Huawei>sys [Huawei]sysname sw1 [sw1]int vlanif1 [sw1-Vlanif1]ip address …

动态代理IP的适用范围与优势分析

1. 什么是动态代理IP&#xff1f; 动态代理IP是一种在每次连接时更换IP地址的代理服务。与静态代理IP不同&#xff0c;动态代理IP会在每次访问时分配一个新的IP地址&#xff0c;或在设定的时间间隔内自动更换。这种机制使得动态代理IP非常适合需要频繁更换IP的应用场景。 2. …

视频单条剪、脚本靠手写?云微客开启海量视频时代

老板们注意了&#xff0c;现在已不再是视频单条剪&#xff0c;脚本靠手写的时代&#xff01;在这个信息爆炸的时代&#xff0c;短视频已经成为了现代信息传播和娱乐消费的重要载体&#xff0c;那么我们该如何高效、快速地制作出大量高质量的短视频内容呢&#xff1f;这就需要云…

面试必备:接口自动化测试精选面试题大全

一、 请问你是如何做接口测试的&#xff1f; 大体来说&#xff0c;经历以下过程&#xff1a;接口需求调研、接口测试工具选择、接口测试用例编写、接口测试执行、接口测试回归、接口测试自动化持续集成。具体来说&#xff0c;接口测试流程分成以下九步&#xff1a; 第一步&am…

SpringBoot集成kafka开发-消息消费的分区策略(消费者如何判断从哪个分区中消费消息的?)

这里写目录标题 1、kafak消息者消费消息的4种分区策略2、kafka默认的消费分区策略1-RangeAssignor&#xff08;均匀分配、默认分配策略&#xff09;2.1、代码验证RangeAssignor的消息分区策略2.1.1、消费者2.1.2、生产者2.1.3、kafak配置类2.1.4、对象实体类2.1.5、项目配置文件…