认识C语言 Day_6 >函数

简介: 认识C语言 Day_6 >函数

1.函数是什么

函数的概念第一次出现在我们的数学中,例如:f(x)

但是,在C语言中,函数可不同于数学中的函数;C语言中函数就是具有某项功能的代码段,它是C语言管理代码的最小单位(英言是function),早期被翻译成函数,就一直沿用了,现在新的编程语言都翻译成方法。

函数把具有某些功能的若干行代码封装在函数中方便管理代码且方便重复调用

子程序

维基百科中,对函数的定义:子程序

  • 在计算机科学中,子程序是一个大型程序中的某部分代码,由一个或多个语句块组成,负责完成某项特定任务,而且相较于其他代码,具有相对的独立性
  • 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏,这些代码通常被集成为软件库

2.库函数

2.1为什么会有库函数?

  • 在我们学习C语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想把这个结果打印到我们的屏幕上,这个时候我们会频繁地使用一个功能:将信息按照一定的格式打印到屏幕上(printf)
  • 在编程的过程中,我们也会频繁地做一些字符串拷贝工作(strcpy)
  • 在编程的过程中,我们也会计算类如n的k次方这样的运算(pow)

像上面描述的这些基础功能,它们并不是业务性的代码。我们在开发的过程中每个程序员都可能用得到,为了支持可移植性提高程序的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员进行程序开发

2.2认识库函数

库函数不是C语言提供的

C语言标准中预定好,由编译器的厂商提供实现

比如strlen函数,C语言标准规定:

  1. 函数的功能:求字符串的长度
  2. 函数名:strlen
  3. 参数:const char* str
  4. 返回类型:size_t

当标准规定好后,这时候A厂商和B厂商写出了这个函数,功能一样,但是由于不同厂商的程序员编写方法不同,内部的实现细节可能不同

size_t  strlen(const char*str这就是strlen函数的原型

所有的库函数都在标准库中

2.3如何学习库函数

那么我们怎么学习库函数呢?

这里我推荐大家可以通过一个网站来学习:

www.cplusplus.com

cplusplus.com/reference/

2.4C语言中常用的库函数

2.4.1介绍

C语言中,常用的库函数都有:

  • I/O函数
  • 字符串操作函数
  • 字符操作函数
  • 内存操作函数
  • 时间/日期函数
  • 数学函数
  • 其他库函数

例如 stdio.h 头文件包含标准输入输出函数

例如 math.h 头文件包含数学相关的函数

2.4.2学习简单的库函数

pow

double pow ( double base , double exponent ) ;

他的意思是求base的exponent次方

pow库函数包含在math.h头文件中

https://cplusplus.com/reference/cmath/pow/

他的使用方法是这样的

#include "math.h"
#include "stdio.h"
int main(){
    pow(x,y);//求x的y次方
    return 0;
}

这里我们知道他的结果是一个整数,可以强制转换成int型

cplusplus.com/reference/cmath/pow/

strcpy

char * strcpy ( char * destination , const char * source ) ;

source指向的字符串拷贝到destination的数组空间里面去

strcpy库函数包含在string.h头文件中

举个例子

https://cplusplus.com/reference/cstring/strcpy/

memset

void * memset ( void * ptr , int value , size_t num ) ;

ptr指向的内存块中前num个字节的内容设置成value

memset库函数包含在string.h头文件中

https://cplusplus.com/reference/cstring/memset/

3.自定义函数

如果库函数能够干所有的事情,那还要程序员干什么?

所以更加重要的是自定义函数

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

但是不一样的是这些都是我们自己来设计,这给程序员一个很大的发挥空间

3.1函数的组成

ret_typefun_name ( para 1 , * )

{

       statement;//语句项

}


ret_type     返回类型

fun_name   函数名

para 1         函数参数

函数参数可以没有,可以是一个,可以是多个

总结一下就是函数有以下四个部分

  • 函数名
  • 参数
  • 返回类型
  • 函数体

这四个部分都体现出来,这个函数基本就完成了

4.函数参数

4.1实参和形参

函数的参数分为实参形参

实际参数 形式参数

4.1.1实参

真实传给函数的参数,叫实参

实参可以是:常量、变量、表达式、函数等

无论实参是何种类型的量,在进行函数调用的时候,都必须有确定的值,以便把这些值传送给形参

4.1.2形参

形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数

形式参数当函数调用完成之后就自动销毁了,因此形式参数只在函数中才有效

4.1.3实参形参的关系

  • 函数调用的时候,将实参传递给形参
  • 形参其实是实参的一份临时拷贝

因此,对形参的修改,不会改变实参

5.函数调用

5.1传值调用

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

5.2传址调用

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

6.函数的嵌套调用和链式访问

函数和函数之间可以根据实际的需求进行组合,也就是互相调用的

6.1嵌套调用

嵌套调用就是某个函数调用另外一个函数

6.2链式访问

把一个函数的返回值作为另一个函数的参数

7.函数的声明和定义

7.1函数声明

  • 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了
  • 函数的声明一般出现在函数的使用之前,要满足先声明后使用
  • 函数的声明一般要放在头文件

在使用函数之前,先告诉编译器有这个函数  

在未来的工程中,代码是比较多的

函数一般是放在.h文件中声明,在.c文件中实现的

7.2函数定义

  • 函数的定义是指函数的具体实现,交代函数的功能实现

test.h

放置函数的声明

test.c

放置函数的实现

8. 结束

那么今天的学习就到这里咯,今天我们学习了函数的有关知识

小杜跟各位小伙伴在一起成长,祝我们都能成为大牛!

                                                                                                                               //小杜的成长之路

相关文章
|
21天前
|
存储 Serverless C语言
【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数
本文介绍了C语言中的`gets`和`puts`函数,`gets`用于从标准输入读取字符串直至换行符,并自动添加字符串结束标志`\0`。`puts`则用于向标准输出打印字符串并自动换行。此外,文章还详细讲解了`str`系列字符串操作函数,包括统计字符串长度的`strlen`、复制字符串的`strcpy`、比较字符串的`strcmp`以及拼接字符串的`strcat`。通过示例代码展示了这些函数的具体应用及注意事项。
|
24天前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。
|
24天前
|
存储 C语言
C语言程序设计核心详解 第七章 函数和预编译命令
本章介绍C语言中的函数定义与使用,以及预编译命令。主要内容包括函数的定义格式、调用方式和示例分析。C程序结构分为`main()`单框架或多子函数框架。函数不能嵌套定义但可互相调用。变量具有类型、作用范围和存储类别三种属性,其中作用范围分为局部和全局。预编译命令包括文件包含和宏定义,宏定义分为无参和带参两种形式。此外,还介绍了变量的存储类别及其特点。通过实例详细解析了函数调用过程及宏定义的应用。
|
1月前
|
Linux C语言
C语言 多进程编程(三)信号处理方式和自定义处理函数
本文详细介绍了Linux系统中进程间通信的关键机制——信号。首先解释了信号作为一种异步通知机制的特点及其主要来源,接着列举了常见的信号类型及其定义。文章进一步探讨了信号的处理流程和Linux中处理信号的方式,包括忽略信号、捕捉信号以及执行默认操作。此外,通过具体示例演示了如何创建子进程并通过信号进行控制。最后,讲解了如何通过`signal`函数自定义信号处理函数,并提供了完整的示例代码,展示了父子进程之间通过信号进行通信的过程。
|
29天前
|
C语言
C语言 字符串操作函数
本文档详细介绍了多个常用的字符串操作函数,包括 `strlen`、`strcpy`、`strncpy`、`strcat`、`strncat`、`strcmp`、`strncpy`、`sprintf`、`itoa`、`strchr`、`strspn`、`strcspn`、`strstr` 和 `strtok`。每个函数均提供了语法说明、参数解释、返回值描述及示例代码。此外,还给出了部分函数的自实现版本,帮助读者深入理解其工作原理。通过这些函数,可以轻松地进行字符串长度计算、复制、连接、比较等操作。
|
1月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
2月前
|
C语言
【C语言】字符串及其函数速览
【C语言】字符串及其函数速览
25 4
|
2月前
|
编译器 程序员 C语言
【C语言篇】从零带你全面了解函数(包括隐式声明等)(下篇)
⼀般情况下,企业中我们写代码时候,代码可能⽐较多,不会将所有的代码都放在⼀个⽂件中;我们往往会根据程序的功能,将代码拆分放在多个⽂件中。
|
2月前
|
测试技术 C语言
C语言中的void函数
C语言中的void函数
|
2月前
|
存储 安全 编译器
C语言中的scanf函数
C语言中的scanf函数
下一篇
无影云桌面