服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言深入讲解函数的使用

C语言深入讲解函数的使用

2022-11-08 12:35YU-fect C/C++

各位小伙伴们,今天YU同学给大家带来的是与函数相关的知识,本篇将会带着大家初步认识和调用函数来解决一些简单的问题

关于函数

函数是C语言的基本单元,函数中包含实现程序功能的代码。

C语言程序的入口位于main()函数之中,为了方便组织配合,调试和运行,一般是用main函数作为主调函数,通过调用其他的函数来实现程序的运行。

他们的关系图如下:

C语言深入讲解函数的使用

 

1. 函数的定义形式

先给大家看看完整的函数代码格式,先有个大概印象

int add(int a,int b);
//这是函数声明,告诉系统有这样一个函数
//注:如果函数写在main函数之前,那这句代码是可以省略的
int add(int a,int b)
{
	int c=a+b;
	return c;
}
  • 函数头

格式:

返回类型 函数名 (参数1,参数2,…)

对于上面函数例子int add(int a,int b)来说,add前面的int是返回类型,add是函数名,int a 是第一个参数,int b 是第二个参数。

翻译: 定义了一个名为add的函数,向函数传入两个整形数据后,函数会返回一个函数内部处理后的整形数据。

  • 函数体

函数名后带括号里的全部内容。函数体内部包括声明变量和执行完成函数功能的代码。

解释: 这里声明了整形变量c,用c接受了参数a和参数b相加后的值,然后add函数返回c的值。

 

2. 函数的声明

函数的声明的告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体内容还是要看函数内部的功能代码。

形式:

返回类型 函数名 (参数) ;

注意要有";"来结束声明。

 

3. 返回语句

在C语言学习中会经常看到这样一句代码return 0;这也是main函数的最后一句代码,其作用有以下两点:

  • 立即从当前函数中退出,返回到调运这个函数的程序中。
  • 将函数的返回值待会到调用这个函数的程序中。

来给大家看个例子:

//int Add5(int n);
//这里的函数声明在main函数之前,可以省略上面一行的代码
int Add5(int n)
{
	return n + 5;
	//看看return后面的语句能不能被执行
	printf("能执行的话吱一声");
}

int main()
{
	int a = 1,b=0;
	 b = Add5(b);
	 printf("%d", b);
	 return 0;
}

C语言深入讲解函数的使用

return 后面的代码是不会运行的。

 

4. 函数参数

参数根据其传送的方式分为形式参数和实际参数两种。

4.1 形式参数(传值调用)

形式参数的作用就算传送数值,它把参数的数值传入函数,但参数本身的值是不会被函数修改的,前面举的例子都是用的形参(形式参数的简称)。

下面给大家看看例子:

void fuc(int n);
//void类型即返回类型为空,不会有返回值,但还是会运行内部的代码。
//这里的声明不能省!函数的定义在main函数下面。
int main()
{
	int a = 10;
	fuc(a);//将a的值传给了n
	printf("%d", a);
	return 0;
}

void fuc(int n)//这里是函数的定义
{
	n = 0;
}

C语言深入讲解函数的使用

结果打印a的值为10,没有被fuc()修改成0。

4.2 实际参数(传址调用)

实际参数是通过把参数的地址传到函数内部,函数通过地址直接修改实际变量的值,因此,实际参数是可以通过函数修改的。

这里看看传递实参的效果:

void fuc(int* n);
//改动1 n的类型是指针,它存的是实际变量的地址
int main()
{
	int a = 10;
	fuc(&a);
	//改动二 &为取地址符,直接获取变量的地址,这里是把a的地址传送到函数内部
	printf("%d", a);
	return 0;
}

void fuc(int* n)//改动三 其实和改动一是一样的
//这里的变量是n,n的类型是int*,n现在是变量a的地址
{
	*n = 0;
}

对于*n = 0;

*为解引用操作符,可以取出地址里面储存的值这里是把n中储存的地址对应的数赋值为0

C语言深入讲解函数的使用

运行结果如下,a的值被更改为0

C语言深入讲解函数的使用

4.3 无参数

很多时候函数是不需要参数的,没有参数是不会影响函数运行的,一般打印菜单的话是不用设置参数的,这里随便给大家展示一下:

void  Member_Menu();
void  Member_Menu()
{
	printf("*******************\n");
	printf("用户管理:>>\n请输入您想进行的操作:\n1.会员添加\n2.会员删除\n3.会员修改\n");
}

运行时函数的功能就是打印菜单。

 

5. 函数的调用

5.1 嵌套调用

函数内部是可以再调用其他函数的。如:

void fuc1()
{  
printf("函数1");  
}
void fuc2()
{
printf("函数2");
}
void fuc3()
{
	fuc1();
	fuc2();
}
int main()
{
	fuc3();
	return 0;
}

C语言深入讲解函数的使用

5.2 函数递归

递归简单来说是自己调用自己,这种调用十分巧妙,它可以用少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

递推实现的重点:

  • 找到递推公式
  • 设置结束标志

现在给大家展示一下递归的使用:

斐波那契数列:F(0)=1,F(1)=1,F(n) = F(n-1) + F(n-2) (n>=2)

递归版本:

int fib(int n)
{
if (n <= 2)         
return 1;
  else
  return fib(n - 1) + fib(n - 2);
}

非递归版本:

int Fib()
{
	int n,m=1,k,j,i=0;
	scanf_s("%d", &n);
	if (n == 0 || 1 == n)
		i = 1;
	if (n > 1)
	{
		for (k = 1, i = 1; k < n; k++)
		{
			j = i;//储存i即n-1
			i += m;//n=n-1  +n-2
			m = j;//m==f(n-2)变成n-1,也就是下一个的n-2
		}
	}
	printf("%d", i);
}

简单对比一下给大家看看二者的区别,不过这里的递归只是以最低要求(完成任务)来写的,实际上这样写道话质量是很低的,这点下一次我们会详细说明的。

总结:

今天给大家带来的是简单的函数介绍,让大家简单了解函数声明,两种参数变量以及函数的调用方法。

到此这篇关于C语言深入讲解函数的使用的文章就介绍到这了,更多相关C语言 函数内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_61382854/article/details/124074461

延伸 · 阅读

精彩推荐
  • C/C++C++静态变量,常量的存储位置你真的了解吗

    C++静态变量,常量的存储位置你真的了解吗

    这篇文章主要介绍了C++中静态变量与常量的存储位置的相关资料,需要的朋友可以参考下,希望能够给你带来帮助...

    Jormungand9272021-12-24
  • C/C++C语言实现字符串替换的示例代码

    C语言实现字符串替换的示例代码

    本文主要介绍了C语言实现字符串替换的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    bufanq11952022-08-14
  • C/C++深入浅析OpenCV copyTo()函数

    深入浅析OpenCV copyTo()函数

    在Mat矩阵类的成员函数中copyTo(roi , mask)函数是非常有用的一个函数,尤其是后面的mask可以实现蒙版的功能,下面通过本文给大家介绍下OpenCV copyTo()函数的相...

    流楚丶格念10952022-08-09
  • C/C++全排列算法的原理和实现代码

    全排列算法的原理和实现代码

    这篇文章主要介绍了全排列算法的原理和实现代码,全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个,需要的朋友可以参考下...

    C语言程序设计4172021-01-30
  • C/C++一篇文章弄懂C++左值引用和右值引用

    一篇文章弄懂C++左值引用和右值引用

    左值(lvalue)和右值(rvalue)是 c/c++ 中一个比较晦涩基础的概念,这篇文章主要给大家介绍了关于如何通过一篇文章弄懂C++左值引用和右值引用的相关资料,需要的...

    爱吃菠萝不吃萝卜6742021-12-03
  • C/C++C语言修炼之路初识指针阴阳窍 地址还归大道真下篇

    C语言修炼之路初识指针阴阳窍 地址还归大道真下篇

    指针是指向另一个变量的变量。意思是一个指针保存的是另一个变量的内存地址。换句话说,指针保存的并不是普通意义上的数值,而是另一个变量的地址值...

    玄澈_7842022-10-09
  • C/C++C++ 类的友元机制解读

    C++ 类的友元机制解读

    这篇文章主要介绍了C++ 类的友元机制的相关资料,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下...

    流星斩月7262021-10-22
  • C/C++详解如何用alpine镜像做一个最小的镜像并运行c++程序

    详解如何用alpine镜像做一个最小的镜像并运行c++程序

    这篇文章主要介绍了详解如何用alpine镜像做一个最小的镜像并运行c++程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习...

    Coldestmonth7602021-09-29