带你轻松玩转C语言函数(上)

简介: 笔记

函数是什么?


数学中我们常见到函数的概念。但是你了解C语言中的函数吗? 维基百科中对函数的定义:子程序 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。


C语言中函数的分类


1. 库函数 (C语言提供的库函数)2. 自定义函数(自己编写的函数)


库函数举例



strcpy()函数

1.png


功能:


拷贝字符串

将源所指向的 C 字符串复制到目标所指向的数组中,包括终止空字符(并在该点停止)。将(a,b)将b拷贝到a中,包含b的\0,会覆盖掉a中的内容

2.png

memset()函数

3.png


功能:将 ptr 指向的内存块最开始的num个字节数设置为指定的值(解释为无符号字符),将ptr向后的num个字节,设置成value

4.png

自定义函数


ret_type fun_name(para1, * )


{ statement;//语句项 }


ret_type 返回类型


fun_name 函数名


para1    函数参数

5.png



此时函数并没有交换,这是因为:当实参传递给形参的时候,形参是实参的一份临时拷贝


,对形参的修改不会影响实参。

6.png

若想让形参对实参产生影响,我们应进行传地址调用,这样就能正确的实现我们想要的功能

7.png



函数的参数

实际参数(实参):

真实传给函数的参数,叫实参。 实参可以是:常量、变量、表达式、函数等。 无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。


形式参数(形参):

形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内 存单 元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。

8.png

当实参传递给形参的时候,形参是实参的一份临时拷贝,对形参的修改不能改变实参


函数的调用:


传值调用

函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。

9.png

这种情况就是进行传值调用,传值调用后进入函数的时候,会自动创建俩个不同的变量,在函数内对这俩个变量进行操作,当函数结束时,这俩个变量会被释放, 因此修改形参不会对实参造成任何影响


传址调用

传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。 这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操 作函数外部的变量。

10.png

此函数进行的是传址调用,传址调用后,当执行到函数,不会自动创建变量,而是将传进来变量的地址传给函数,此时会对原实参地址上的内容进行操作,此时对形参的修改会影响实参的值

11.png

由于是传址调用,但是当调用后如果在函数内部不给形参加*,当执行完函数后,我们发现实参没有任何变化,这是因为px和py都是int *类型,指向的是num1和num2的地址,若对px py进行操作,则是交换他们的地址,但是对他们地址里面的内容没有任何影响



相关文章
|
13天前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
24 0
|
24天前
|
编译器 C语言 C++
【C语言】memset()函数(内存块初始化函数)
【C语言】memset()函数(内存块初始化函数)
26 0
|
24天前
|
编译器 C语言 C++
【C语言】memcpy()函数(内存块拷贝函数)
【C语言】memcpy()函数(内存块拷贝函数)
41 0
|
25天前
|
C语言 C++
【C语言】rand()函数(如何生成指定范围随机数)
【C语言】rand()函数(如何生成指定范围随机数)
16 0
|
1月前
|
C语言
在C语言中数组作为函数参数的应用与示例
在C语言中数组作为函数参数的应用与示例
15 0
|
1月前
|
算法 C语言
在C语言中函数的递归调用及应用示例
在C语言中函数的递归调用及应用示例
15 1
|
1月前
|
C语言
在C语言中多维数组名作为函数参数的应用与示例
在C语言中多维数组名作为函数参数的应用与示例
12 0
|
1月前
|
安全 程序员 C语言
探索C语言库函数:字符串拷贝函数strcpy
探索C语言库函数:字符串拷贝函数strcpy
19 0
|
13天前
|
程序员 C语言 开发者
C语言库函数 — 字符串函数(含模拟实现字符串函数)
C语言库函数 — 字符串函数(含模拟实现字符串函数)
35 0
|
20天前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现1
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现