函数及相关知识点

简介: 函数及相关知识点

一.什么是函数

定义:完成一定功能的代码,将代码打包封装起来,成为工具

二.函数的定义

定义函数基本格式:数据类型 函数名(参数列表)

1)定义无参无返回值函数

1. 
void fun()
2. {
3. printf(“--------------------------------------------------\n”);
4. }//这里定义了一个函数,函数名为fun,无返回值,完成打印分隔线的功能。

2)定义有参数无返回值函数

1. 
void max(int x,int y)
2. {
3. int z;
4. z=x>y?x:y;
5. printf(“%d\n”,,z);
6. }
7. //求最大值函数,输出两个数之间的最大值

3)定义有参数有返回值函数

int max(int x,int y)
{
int z;
z=x>y?x:y;
return z;
}//求最大值函数,返回两个数之间的最大值

4)定义无参数有返回值函数

int SCANF() //输入函数
{
int temp;
printf("请输入一个整型数据:\n");
scanf("%d",&temp);
return temp;
}

三、函数的调用

1、函数调用语句

函数调用的基本格式:函数名(实参列表);

int a=10,b=20,c;
c=max(a,b); //函数调用语句,调用max函数求a和b两个数中的最大值赋值给c

四、函数的声明

把函数的定义放在最后,主函数里能够调用么?

在一个函数中调用另一个函数(即被调函数)需要具备以下条件:

1)首先被调用函数必须是已经定义好的函数(库函数或自定义的函数)。2)如果使用库函数,应该在本文件开头用#include指令将调用相关库函数时所需用到的信息“包含”

到本文件中来。如:#include<stdio.h>。

3)如果使用用户自定义的函数,在调用函数之前必须要有被调函数相关的声明语句,也就是函数需要先声明后使用。

函数声明语句的一般格式:

函数类型 函数名(参数类型1 参数名1,参数类型2 参数名2,……,参数类型n 参数名n);

五、局部变量和全局变量

按照变量作用域的不同,我们将变量分为局部变量和全局变量。

1、局部变量

局部变量的作用范围只在一定范围内有效

局部变量的定义可能有以下几种情况:

1)在函数开头定义;

2)在函数内部的复合语句中定义;

2、全局变量

全局变量的作用范围相对于局部变量来说更为广泛,其在函数外部定义,也称为外部变量

3、静态变量与动态变量

程序中所定义的变量默认是动态变量(auto)。

在定义变量前加一个static可定义一个静态变量。

静态变量在程序开始后定义,结束前才会被释放,所以其生命周期比较长,在函数调用中只会被定义一次,不会被定义多次,当再次执行到定义语句时,其值不会被重置(初始化),会保留上次改变的值。

六、函数的嵌套调用

函数的定义时相互平行、独立的,在定义函数时,一个函数内不能再定义另一个函数,也就是说,函数不能嵌套定义。但是函数可以嵌套调用,也就是再调用一个函数的过程中,又调用另一个函数。

七、函数的递归调用

在调用一个函数的过程中又出现直接或间接地调用此函数本身,称为函数的递归调用。

递归调用演示示例:

//递归求1~n的和
int function(int n)
{
if(0>=n)return n; //结束递归的条件
return n+function(n-1); //这里在函数中调用此函数本身,实现递归
}

八、数组作为函数参数传递

数组名为数组的首地址,所以整个数组作为函数参数传递实际上是引用传递,传递的是地址,形参的改变会影响到实参。

如:字符串的输出

1. void PUTS(char str[])
2. {
3. puts(str);
4. }
5. main
6. {
7. char S[20]="hello world!";
8. PUTS(S);
9. }

注意:在函数中改变形参数组元素的值,那实参数组元素的值是否会被改变呢?

(涉及到指针的相关概念)

相关文章
|
安全 区块链
SOL链(Solana链)智能合约系统开发功能需求/案例设计/步骤指南/源码程序
Developing a smart contract system based on SOL chain (Solana chain) can achieve various functions and applications. The following are some common SOL chain smart contract system development features:
|
Shell 网络安全 开发工具
Windows环境安装及配置git并连接gitee远程仓库
Windows环境安装及配置git并连接gitee远程仓库
4128 0
|
11月前
|
设计模式 中间件 程序员
【实战指南】深入了解23种设计模式
《深入了解23种设计模式:程序员必读指南》旨在帮助程序员理解和应用设计模式,以解决常见编程问题。书中介绍了设计模式的起源、目的及其在提高代码复用性、质量和团队沟通中的作用。涵盖创建型、结构型和行为型三大类共23种设计模式,每种模式均附有详细解析与C++实现示例,适合初学者和有经验的开发者学习参考。
264 88
|
10月前
|
运维 Ubuntu Linux
自动化运维:使用Ansible简化日常任务
在快节奏的IT世界中,时间就是一切。本文将揭示如何通过Ansible这一强大的自动化工具来节省宝贵的时间,从而提高效率和减少人为错误。我们将深入探讨Ansible的核心概念、安装过程以及如何编写简单的playbook来自动执行常见运维任务。无论你是新手还是有经验的系统管理员,这篇文章都将为你提供实用的知识和技能,让你能够更好地控制你的服务器环境。
|
移动开发 前端开发 数据库
基于若依的ruoyi-nbcio系统调用代码生成表的注意问题
基于若依的ruoyi-nbcio系统调用代码生成表的注意问题
185 3
|
11月前
|
机器学习/深度学习 自然语言处理 自动驾驶
深度学习之常识知识库构建
基于深度学习的常识知识库构建是一项旨在自动化获取和组织广泛的常识性信息的技术,它通过深度学习模型从文本、图像、语音等多种数据源中提取出隐含的常识知识,并构建一个可以被机器理解和应用的知识库。
216 4
|
Java 容器
equals与hashcode的区别与联系
equals与hashcode的区别与联系
164 1
获取文件绝对路径的几种方法比较
获取文件绝对路径的几种方法比较
|
人工智能 搜索推荐 语音技术
AI赋能视频剪辑师:人工智能时代,视频剪辑师该如何剪辑?
在AI时代,视频剪辑师借助智能素材整理、自动化剪辑、语音识别及创意辅助技术,提升效率和创新空间。他们应拥抱AI,结合AI优化剪辑流程,如高效预筛选素材、减少手动操作,同时借助AI激发创意。保持主观能动性和创造力至关重要,通过学习,如获取Adobe国际认证,提升专业技能,适应行业发展,打造个人品牌,以在行业中保持竞争力。
|
缓存 监控 Linux
深入了解Linux的`lscpu`命令:你的CPU信息专家
`lscpu`是Linux下的命令行工具,用于获取CPU详细信息,如架构、核心、线程、缓存和型号。它从系统文件读取数据,提供实时信息,支持多种输出格式,如扩展视图、解析格式。常用参数包括显示所有CPU (`-a`)、在线CPU (`-b`) 和可解析格式 (`--parseable`)。结合其他工具,`lscpu`在系统管理和性能调优中十分有用。