一文搞定C语言函数和函数递归(和bug郭一起学C系列)(1)

简介: 一文搞定C语言函数和函数递归(和bug郭一起学C系列)(1)

函数的概念

什么是函数呢?

是和数学里学的函数一样吗?


数学里的函数,具有对应关系和某种功能!


你了解C语言函数吗?维基百科中,C语言函数又叫做:子程序!


在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,

subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组

成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。

一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软

件库。

函数在面向过程的语言中已经出现。是结构(Struct)和类(Class)的前身。本身就是对具有相关性语句的归类和对某过程的抽象。

让我们来看看我们最熟悉的主函数!


int main()
    {
       //里面多条语句块组成!
       //具有独立性!
    }

还有函数的其他特性,我们学完这一章节再来总结一下!


C语言函数的分类


库函数

库函数就是我们直接可以使用的函数,像printf,scanf,strlen ....等等,C语言函数库里已经实现好了,且具有某些功能的函数!我们直接拿来用就好了,但是前提我们得引该函数所在函数库的头文件,也就是我们之前比喻的:用别人的东西,我们要打招呼!我们包含一下这个头文件就可以使用该函数了!

 

#include<stdio.h>
    int main()
    {
     printf("hhh");
     //该函数的使用要引头文件<stdio.h>
    }

自定义函数

自定义函数,顾名思义就是自己定义函数!

当我们要实现某种功能时,函数库中没有相应函数能够具有这种功能,那我们只能自己写一个具有该功能的函数了。

int Add(int a,int b)
{
  return a+b;
}
  int main()
  {
      int a=1,b=3;
      int c=Add();  //自定义加法功能的函数!
  }

该函数的细节,我们稍后学习,我们只要知道,这就是自定义函数就OK!


库函数

为什么会有库函数?


我们知道在我们学习C语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想把这个结果打印到我们的屏幕上看看。这个时候我们会频繁的使用一个功能:将信息按照一定的格式打印到屏幕(printf)。

#include<stdio.h>
int main()
{
 printf("搞定C语言函数和函数递归");
 return 0;
}

在编程的过程中我们会频繁的做一些字符串的拷贝工作(strcpy)。

#include<string.h>
    int main()
    {
     char arr1[]="abcdefg";
     char arr2[]="xxx";
     strcpy(arr1,arr2);
     //将arr2拷贝到arr1中!
    }

在编程是我们也计算,总是会计算n的k次方这样的运算(pow)。

#include<math.h> 
int main()
{ 
   int n=2;
   int k=3;
   int x=pow(n,k);
   //计算n的k次方!
  return 0;
}

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

不同函数可能写在不同的函数库中,我们需要引用不同的函数库!

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

这里我给大家推荐一个学习和查阅函数库的网站:www.cplusplus.com建议收藏!


让我们一起来看看吧!

image.png

C library就是C语言函数库!

image.png

注:C语言函数库,如果要在C++代码中引用,就将函数库名加个C

这就是函数库的目录!点击就可以打开该函数库进行该函数库中函数学习和查阅!

image.png

也可以点击搜索,输入函数名,查阅学习!


简单的总结,C语言常用的库函数都有:


IO函数

字符串操作函数

字符操作函数

内存操作函数

时间/日期函数

数学函数

其他库函数

我们参照网站文档,学习几个库函数


memset

image.png



我们学习一个函数,首先我们应该知道,该函数的作用

Fill block of memory

Sets the first num bytes of the block of memory pointed by ptr to the specified value (interpreted as an unsigned char).

这就是memseth函数的作用,将ptr指针地址的空间,num个字节,初始化为value值!


然后我们在看看f返回值,每个参数的细节,还有所在库函数!

void * memset ( void * ptr, int value, size_t num ); <string.h>

可以知道该函数的返回值是void(空)。

ptr是一个void类型的指针。

value是int 类型的值,

num是字节个数。

还有一些相关细节描述,就可以参考文档学了。

我们就可以使用该函数了!

image.png

库函数的学习就介绍到这里,可以利用网站文档自行学习!http://www.cplusplus.com/


自定义函数

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

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

自定义函数和库函数一样,有函数名,返回值类型和函数参数。 但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。

函数的组成:


ret_type fun_name(para1, * )
{
    statement;//语句项
}
ret_type //返回类型
fun_name// 函数名
para1    //函数参数

我们举个例子,大家就懂了怎么自定义函数了!


写一个函数求两个数中的较小值!


int Min(int x,int y)   //函数的定义
 {
    if(x<y)
    return x;
    else
    return y;
 }
int main()
{
   int x=2;
   int y=5;
  int c = Min(x,y); //函数的调用
  return 0;
}

在Min调用函数中,函数的参数是x,y叫做实际参数,我们将x,y传给函数,然后,函数就会接收,创建了int x,int y来接收实际参数,(int x,int y)是形式参数!是x,y的临时拷贝!而int c= Min(x,y);就是将函数返回值,我们要求的最小值接收。而且类型要一致!


我们再来写个函数!


交换两数


void Exchange1(int a,int b) //函数的定义
{
    int c=0;
    c=a;
    a=b;
    b=c;
}
 int main()
 {
   int a=2;
   int b=3;
   printf("a=%d b=%d\n",a,b);
   Exchange1(a,b);//函数的调用
   printf("a=%d b=%d",a,b);
 }

image.png

我们看运行结果,并没有实现两数的交换为啥会这样呢?你可以调试一下!

我们再用另一种方式写这个代码!


void Exchange2(int* a,int* b) //函数的定义
{
    int c = 0;
    c = *a;
   *a = *b;
   *b = c;
}
 int main()
 {
   int a=2;
   int b=3;
   printf("a=%d b=%d\n",a,b);
   Exchange2(&a,&b);//函数的调用
   printf("a=%d b=%d",a,b);
 }

image.png

为啥将实际参数a,b改成&a,&b指针就能实现两数的交换!

我们学习函数的参数就知道了!

目录
相关文章
|
29天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
58 10
|
29天前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
46 9
|
29天前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
40 8
|
29天前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
47 6
|
29天前
|
存储 C语言
【C语言】输入/输出函数详解
在C语言中,输入/输出操作是通过标准库函数来实现的。这些函数分为两类:标准输入输出函数和文件输入输出函数。
220 6
|
29天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
59 6
|
29天前
|
C语言 开发者
【C语言】断言函数 -《深入解析C语言调试利器 !》
断言(assert)是一种调试工具,用于在程序运行时检查某些条件是否成立。如果条件不成立,断言会触发错误,并通常会终止程序的执行。断言有助于在开发和测试阶段捕捉逻辑错误。
41 5
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
60 4
|
2月前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
38 6
|
2月前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。