如何深入掌握C语言函数

简介: 每个c程序都至少有一个函数,即主函数 main() 对于简单任务程序而言,全部的代码都写在main()函数中对于实际开发,程序任务复杂多样如果全写在main()函数中,就会变得庞大臃肿,结构复杂,造成有很多不必要的重复由此根据程序的逻辑和任务的分工把代码写到不同的自定义函数中而业务逻辑和处理流程化分到main()需要执行具体任务再调用自定义函数

函数基本概念

每个c程序都至少有一个函数,即主函数 main()

对于简单任务程序而言,全部的代码都写在main()函数中

对于实际开发,程序任务复杂多样

如果全写在main()函数中,就会变得庞大臃肿,结构复杂,造成有很多不必要的重复

由此根据程序的逻辑和任务的分工把代码写到不同的自定义函数中

而业务逻辑和处理流程化分到main()

需要执行具体任务再调用自定义函数


函数类型对比

库函数

C语言或系统提供(自带)

实现某些基本的功能,例如scanf、printf,可在程序中直接调用

需包含相对应头文件


自定义函数

程序员为了完成某项任务而编写的函数

实现某项功能或让主程序更简洁

使用自定义函数之前,必须先声明和定义


库函数

C语言提供了一些已声明和定义的函数

调用这些函数可以完成一些基本的功能

我们把这些函数称为C 标准函数(C standard library),简称库函数

例如printf、scanf、memset、strcpy等

栗子

strcpy(复制)

20210723114358211.png

20210726113136700 (1).png


提个问题:为什么复制成了完全替换,而不是仅替换对应的空间长度的内容?

20210726113404798.png


首先我们得明白在arr2“hello”的结尾后面是结束标志“\0”

他仅是结束标志不作为内容,但复制的同时也将它带上了

效果就是目标空间的“hello”后有个“\0”代表结束

后面的内容不会被读出,也就相当于“完全替换”

memset(内容指定)

20210726114031356.png

20210723114532309.png

注意:使用库函数必须包含相应的#include头文件

自定义函数

自定义函数和库函数都具有函数名称,返回值类型,函数参数

库函数无法干所有的事,需要程序员来发挥

20210723115148819 (1).png

调用

如果函数的返回值是void,表示函数以完成某项功能为主,一般用单行书写,独占一条语句

返回值不是void,单行书写则不关心它的返回值,也可以当成常量用于任何表达式中

参数的传递

函数的参数可以理解为函数的局部变量

传值

参数传递就是调用者程序把变量(或常量)的值复制一份给函数的参数

复制后调用者程序的变量和函数的参数就再也没有关系

所以在函数调用的过程中,函数的参数的值发生改变并不会影响调用者程序的变量的值

注:因为没有关系,形式参数与实际参数可重名

传址

任务有改变修改实际参数的必要,进行传址

告诉函数参数的空间地址,可直接对地址指向的对象进行有效改变

栗子

返回最大值函数

20210723115245449.png

这个函数具有返回值:x>y成立的话,那么就返回x,否则就返回y。

接下来我们看看里一个形式的返回最大值

c.png为什么不行呢?

注意函数内的x,y只是形势参数,它的改变不能影响到实际参数。

解决方案

20210726115112902.png


这里我们是通过取地址,带入参数的地址,再解引用来改变参数内容

局别

20210726115459564.png

其实用好传值和传址调用这个精髓,对函数的使用便会简单许多


相关文章
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
34 3
|
9天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
26 6
|
29天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
35 10
|
23天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
|
28天前
|
机器学习/深度学习 C语言
【c语言】一篇文章搞懂函数递归
本文详细介绍了函数递归的概念、思想及其限制条件,并通过求阶乘、打印整数每一位和求斐波那契数等实例,展示了递归的应用。递归的核心在于将大问题分解为小问题,但需注意递归可能导致效率低下和栈溢出的问题。文章最后总结了递归的优缺点,提醒读者在实际编程中合理使用递归。
55 7
|
28天前
|
存储 编译器 程序员
【c语言】函数
本文介绍了C语言中函数的基本概念,包括库函数和自定义函数的定义、使用及示例。库函数如`printf`和`scanf`,通过包含相应的头文件即可使用。自定义函数需指定返回类型、函数名、形式参数等。文中还探讨了函数的调用、形参与实参的区别、return语句的用法、函数嵌套调用、链式访问以及static关键字对变量和函数的影响,强调了static如何改变变量的生命周期和作用域,以及函数的可见性。
30 4
|
1月前
|
存储 编译器 C语言
C语言函数的定义与函数的声明的区别
C语言中,函数的定义包含函数的实现,即具体执行的代码块;而函数的声明仅描述函数的名称、返回类型和参数列表,用于告知编译器函数的存在,但不包含实现细节。声明通常放在头文件中,定义则在源文件中。
|
1月前
|
C语言
c语言回顾-函数递归(上)
c语言回顾-函数递归(上)
33 2
|
1月前
|
Java 编译器 C语言
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
22 3
|
1月前
|
存储 程序员 编译器
C语言——动态内存管理与内存操作函数
C语言——动态内存管理与内存操作函数