【C语言】函数详解

article/2025/9/21 21:58:14

       🔥🔥 欢迎来到小林的博客!!
      🛰️博客主页:✈️小林爱敲代码
      🛰️专栏:✈️C语言快速入门
      🛰️欢迎关注:👍点赞🙌收藏✍️留言
在这里插入图片描述

      这篇文章给大家介绍C语言中函数的使用,本来打算昨天为大家更新的。但是阳了,早上刚挂完点滴,就跑来更新博客了。🌺🌺

  
      每日一句: 成功不是将来才有的,而是从决定去做的那一刻起,持续积累而成。

大纲:

![

函数内容的大纲:
在这里插入图片描述

目录

  • 💖7 函数
    • 💪7.2 函数的声明和定义
      • 🔮7.2.1 函数的声明
      • 🔮7.2.2 函数的定义
    • 💪7.3 函数的调用和传参
      • 🔮7.3.1 函数的调用
      • 🔮7.3.2 函数的传参
    • 💪7.4 函数的返回值
    • 💪7.5 函数的传址调用
    • 💪7.6 函数的嵌套调用
    • 💪7.7 函数的递归
  • 结言🥳:

💖7 函数

函数有2类,一类是库函数,一类是自定义函数,库函数就是C语言为我们提供的。例如我们常用的 printf(),scanf(),这些都是C语言为我们提供的库函数。自定义函数则是我们自己定义的函数,自己定义,自己调用。

💪7.2 函数的声明和定义

🔮7.2.1 函数的声明

函数的声明定义格式为: 返回值类型 函数名(参数列表);
返回值类型:就是数据类型,如果没有返回值类型则用void。
函数名:随意,但在C语言中,函数名不能重复。
参数列表:就是传给函数的数据。

以下是函数声明的例子:

#include <stdio.h>//一个无返回值,无参数的函数声明
void a();//一个无返回值,有1个int参数的函数声明
void b(int a);//有1个int类型参数和1个double类型参数 ,且有返回值为int类型的函数
int c(int a,double d);int main()
{return 0;
}

函数的声明一般会放在.h的头文件中。

🔮7.2.2 函数的定义

函数声明之后,我们需要定义。定义的话就直接把声明函数展开。
函数的定义格式为: 返回值类型 函数名(参数列表) { 函数体;}

函数定义如下:

#include <stdio.h>//一个无返回值,无参数的函数声明
void a();//一个无返回值,有1个int参数的函数声明
void b(int a);//有1个int类型参数和1个double类型参数 ,且有返回值为int类型的函数
int c(int a,double d);//函数a的定义
void a()
{printf("a");
}//函数b的定义
void b(int a)
{printf("b");
}//函数c的定义
int c(int a, double d)
{printf("c");//有返回值必须返回一个值return 0;
}int main()
{return 0;
}

当然,函数在定义的时候,如果未声明,会自动声明。
所以也可以这样:

#include <stdio.h>//函数a的定义,前面未声明在此处自动声明
void a()
{printf("a");
}//函数b的定义,前面未声明在此处自动声明
void b(int a)
{printf("b");
}//函数c的定义,前面未声明在此处自动声明
int c(int a, double d)
{printf("c");//有返回值必须返回一个值return 0;
}int main()
{return 0;
}

那么问题来了,既然定义时候会自动声明,那为什么还要声明呢?这是因为文件扫描是从上往下的,如果发现调用了一个函数,可函数在下面实现。那么就无法识别到这个函数。
例如:

#include <stdio.h>//函数a的定义
void a()
{printf("a");
}int main()
{a();//调用函数areturn 0;
}

这个代码因为定义在main函数的前面,所以可以调用。但是如果定义在main函数的下面,那么main函数调用a函数时,无法识别到a,就会出错。

#include <stdio.h>int main()
{a();//调用函数areturn 0;
}//函数a的定义
void a()
{printf("a");
}

在这里插入图片描述
所以这时候加上声明,就可以正常运行了。
在这里插入图片描述

💪7.3 函数的调用和传参

🔮7.3.1 函数的调用

函数的调用很简单,上面就有演示。
函数的调用格式: 函数名(参数列表);
参数列表要和函数定义时的参数列表匹配
函数调用的例子:

#include <stdio.h>//函数 a没有参数
void a()
{printf("a");
}
//函数 b有1个int参数
void b(int b)
{printf("b");
}int main()
{a();//函数名(参数列表); 但是函数a没有参数,所以不用传参b(1); //函数名(int); 因为函数定义时有1个int类型参数,所以必须传1个int类型return 0;
}

🔮7.3.2 函数的传参

函数的传参上面调用b时也演示过了,就是根据函数定义(声明)时的参数列表一一对应传参。所以再为大家提供几个传参例子。

#include <stdio.h>//参数列表 (int)
void b(int b)
{printf("b");
}//参数列表 (int,double,char)
void c(int a,double b , char c)
{printf("b");
}int main()
{b(1);//传参列表(int)c(1,1.1,'a'); //传参列表(int,double,char); return 0;
}

不过需要注意的是, 传参给函数的参数叫实参。而函数接收的参数叫形参,形参是实参的临时拷贝,改变形参不会影响实参的值。

#include <stdio.h>//参数列表 (int)
void b(int c)
{c = 5;
}int main()
{int c = 2;b(c);//传参列表(int)printf("%d ", c);return 0;
}

如图,C的值并没有发生改变
在这里插入图片描述

💪7.4 函数的返回值

当你期待一个函数会返回你一个特定的值时,你可以选择带返回值的函数。如果没有返回值,那么返回值的类型就是void。

假设我要实现一个Add函数,用来求2个数的和。

#include <stdio.h>//返回值的数据类型为int
int Add(int x, int y)
{int z = x + y;return z;
}int main()
{int z = Add(3, 5); //用 z 来接收函数的返回值printf("%d ", z);return 0;
}

在这里插入图片描述

💪7.5 函数的传址调用

如果我们期望改变实参的值,我们可以选择传址调用,传址调用就是传指针给函数。然后函数对指针指向的空间进行操作。

#include <stdio.h>
void Swap(int* a,int* b)
{int tmp = *a;*a = *b;*b = tmp;
}int main()
{int a = 10;int b = 20;printf("%d,%d\n", a, b);Swap(&a, &b);//传a和b的地址进去printf("%d,%d\n", a, b);return 0;
}

我们会发现a 和 b 的值发生了变化。因为我们给函数传的是 a 和 b的地址,而函数内部通过对a 和 b 解引用找到 a和b所在的内存空间。从而让它们进行交换。
在这里插入图片描述

💪7.6 函数的嵌套调用

函数的嵌套调用,就是我们在另外一个函数调用其他函数。

#include <stdio.h>void b()
{printf("b\n");
}void a()
{printf("a\n");b(); //a函数里面调用 b函数
}int main()
{a();//main函数里面调用函数areturn 0;
}

在这里插入图片描述
所以,函数也是可以嵌套调用的。

💪7.7 函数的递归

递归,栈溢出的罪魁祸首!什么是递归呢?简单来说,就是函数自己调用自己本身。比如以下代码,main函数一直调用自己。如果没有递归的终止条件的话,那么就会出现栈溢出。

#include <stdio.h>int main()
{main();return 0;
}

在这里插入图片描述

所以在使用递归时,我们需要注意两点,一点是递归的结束条件,还有一点就是这个条件每递归一次都要发生变化。

比如我想实现一个函数,要求把一串数字倒着输出。

#include <stdio.h>void a(int n)
{//当n=0时,递归终止if (n == 0){return;}printf("%d ", n % 10);//自己调用自己a(n / 10);
}int main()
{int n = 12345;a(n);return 0;
}

在这里插入图片描述

以上程序的递归展开图:
在这里插入图片描述

结言🥳:

💦💦如果有写的不好或者错误的地方,希望大家指证出来,我会不断的改正自己的错误。💯💯如果感觉写的还可以,可以点赞三连一波哦~🍸🍸后续会持续为大家更新大纲上的内容,以及数据结构,C++,Linux操作系统等方面的知识,本人会坚持持续更新。

🌺🌺拖着发烧的身体也要更新!你们的支持是我最大的动力,希望在往后的日子里,我们大家一起进步!!!
🌺🌺


http://chatgpt.dhexx.cn/article/mCL7rTim.shtml

相关文章

C语言函数大全-- s 开头的函数(1)

s 开头的函数&#xff08;1&#xff09; 1. sbrk1.1 函数说明1.2 演示示例 2. scalb&#xff0c;scalbf&#xff0c;scalbl2.1 函数说明2.2 演示示例 3. scalbln&#xff0c;scalblnf&#xff0c;scalblnl3.1 函数说明3.2 演示示例3.3 运行结果 4. scalbn&#xff0c;scalbnf&a…

【详解C语言】函数

文章目录 1. 函数是什么&#xff1f;2. C语言中函数的分类&#xff1a;1. 库函数&#xff1a;2. 自定义函数 3. 函数的参数3.1 实际参数&#xff08;实参&#xff09;3.2 形式参数&#xff08;形参&#xff09; 4. 函数的调用&#xff1a;4.1 传值调用4.2 传址调用4.3 练习 5. …

C语言函数介绍

1.字母的大小写转换-->islower() 2.快速排序函数-->qsort() 下面正式给大家介绍这两个函数 &#xff08;1&#xff09;islower() islower() 函数用来检测一个字符是否是小写字母。 在默认情况下&#xff0c;小写字母包括&#xff1a; a,b,c,d,e,f,g,h,i,j,k,l,m,n,o…

C语言标准库函数大全(ctype、time 、stdio、stdlib、math、string)

文章目录 C语言函数库:一. <ctype.h>二. <math.h>三. <stdio.h>四. <stdlib.h>五. <time.h>六. <string.h> 文档资料 C语言函数库: C语言的常用的标准头文件有 &#xff1a; <ctype.h>   <time.h>   <stdio.h> <…

【C语言进阶】最常用的库函数大全——从入门到精通

目录 前言&#xff1a; 一.字符串函数 1.strlen——求字符串长度 strlen 2.长度不受限制的字符串函数 a.strcpy——字符串拷贝 strcpy b.strcat——追加字符串 strcat c.strcmp——字符串比较 strcmp 3.长度受限制的字符串函数——strncpy,strncat,strncmp 为什么会…

C语言一些常用的函数

目录 sizeof()运算符strlen()函数abort()函数exit()函数Sleep()函数atof()将字符串转换成浮点数atoi()将字符串转换成整型数的函数atol()将字符串转换成长整型数的函数strlwr()函数strupr()函数 sizeof()运算符 sizeof()运算符: 编译器自带的,不用到任何包都能用。用法&…

C语言常用函数详解

函数详解&#xff1a; strlen(字符串长度)sizeof(字节大小)strcmp(字符串比较)strcpy(字符串拷贝)strcat(字符串追加)strncpy(字符串按字节拷贝)strncmp(字符串按字节比较)strncat(字符串按字节追加)strstr(查找字符串)strtok(查找符号)memcpy(按字节拷贝数据&#xff08;任意类…

C语言的中常用的函数

一、main函数 一个C程序就是由若干头文件和函数组成&#xff0c;有且只有一个主函数&#xff0c;即main函数。 #include <stdio.h>int main(){printf("c语言主函数");return 0; } C程序就是执行主函数里的代码&#xff0c;C语言中的唯一入口。 main前面的int…

C语言中常用的函数

C语言中常用的函数 1、putchar()函数2、getchar()函数3、pow( a , b )函数4、sqrt( a )函数5、fabs(a)函数6、puts(字符数组)函数——输出字符串的函数7、gets(字符数组)——输入字符串的函数8、strcat(a , b)函数——字符串连接函数9、strcpy函数——字符串复制函数10、strncp…

C语言中的函数(详解)

目录 1.函数是什么 2.c语言中函数的分类&#xff1a; 2.1. 库函数 2. 自定义函数 3. 函数的参数 3.1 实际参数&#xff08;实参&#xff09; 3.2 形式参数&#xff08;形参&#xff09; 4. 函数的调用&#xff1a; 4.1 传值调用 4.2 传址调用 5. 函数的嵌套调用和链…

linux Ubuntu将默认bash修改为csh

Ubuntu将默认bash修改为csh 前言Linux系统中的shell版本问题修改方法bash切换csh方法 前言 为什么要将默认bash修改为csh&#xff0c;有时候安装的软件命令是基于csh写的&#xff0c;如果用bash使用软件就会报错&#xff0c;如&#xff1a;“No command ‘setenv’ found”&…

配置你的 csh/tcsh

配置你的 csh/tcsh 选择 csh/tcsh 和许多刚从 Linux 转到 BSD 的人不同&#xff0c;我并没有装完 BSD 就顺手安装 bash&#xff0c;因为之前除了打命令&#xff0c;我没有用到额外的功能&#xff0c;bash 也好&#xff0c;csh 也罢&#xff0c;在我眼里都是当做 shell 来用。但…

bash 和 tcsh(csh)的不同,带例子

我使用bash和tcsh(csh)过程中总结出的一些异同&#xff0c;附我的彩色的提示行配置 效果&#xff1a; 自做的彩色提示符 bash PS1 命令提示符 ## PS1\[\033[01;33m\][\D{%y-%m-%d} \t]\[\033[00m\]\[\033[01;32m\][\!]\[\033[00m\]${debian_chroot:($debian_chroot)}\[\03…

Bash与Csh的区别

zz &#xff1a;http://dangdanding.blog.163.com/blog/static/27992981201262595221896/ 一、csh的while循环控制结构及if then: #!/bin/csh -f while ($#argv > 1) if ("$1" "-s") then shift if ($#argv > 1) then set source …

CSH脚本学习

CSH脚本学习笔记(不常见的命令用法) csh中的 > ! 命令与bash中的> 和>| 命令相同&#xff0c;都是写入文件内容。但在bash中表示没有文件则不创建文件。 foreach var &#xff08; list ) command end 是CSH脚本中的循环命令&#xff0c;将list的值逐一赋值给变量var…

Shell编程之Csh和Bash的经验总结

文章目录 前言1. 变量和环境变量设置1. csh2. bash 2. if语句1. csh2. bash 3. while循环1. csh2. bash 4. 数组1. csh2. bash 5. 获取当前文件路径1. csh2. bash 6. 获取当前时间1. csh2. bash 7. 产生随机数并测试1. csh2. bash 8. 补充1. 查看系统默认用的 Shell2. 查看系统…

矩阵转置基本性质

一个矩阵的转置与本身相乘得到对称矩阵 一个矩阵的逆矩阵与本身相乘得到单位矩阵 行列式不等于零&#xff0c;矩阵可逆&#xff0c;反之不可逆 满秩矩阵一定是可逆的

Maple: 矩阵转置

在Maple中用%T的命令执行矩阵转置&#xff0c;具体效果如下

5*5矩阵转置

编写程序&#xff1a;对一个5X5的二维整型数组转置&#xff0c;即行列互换。 要求从键盘输入数组的值&#xff0c;输出转置前及转置后的结果。 如&#xff1a; 输入格式: 输入数组前有如图示的提示&#xff1b; 输出格式: 输出转置前及转置后的结果&#xff0c;输出前有提示…

矩阵转置输出

输入样例 3 2 1 2 3 4 5 6 #include<stdio.h> int main() {int m,n;int a[15][15]{0};//二维数组int i,j;scanf("%d %d",&m,&n);for(i0;i<m;i)for(j0;j<n;j)scanf("%d",&a[i][j]);//先全部输入再进行其他操作for(i0;i<m;i){for…