广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言深入讲解函数的使用
  • 914
分享到

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

2024-04-02 19:04:59 914人浏览 薄情痞子
摘要

目录关于函数1. 函数的定义形式2. 函数的声明3. 返回语句4. 函数参数4.1 形式参数(传值调用)4.2 实际参数(传址调用)4.3 无参数5. 函数的调用5.1 嵌套调用5.

关于函数

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

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

他们的关系图如下:

在这里插入图片描述

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;
}

在这里插入图片描述

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;
}

在这里插入图片描述

结果打印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

在这里插入图片描述

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

在这里插入图片描述

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;
}

在这里插入图片描述

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语言 函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言深入讲解函数的使用

本文链接: https://www.lsjlt.com/news/145761.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言深入讲解函数的使用
    目录关于函数1. 函数的定义形式2. 函数的声明3. 返回语句4. 函数参数4.1 形式参数(传值调用)4.2 实际参数(传址调用)4.3 无参数5. 函数的调用5.1 嵌套调用5....
    99+
    2022-11-13
  • C语言深入讲解函数参数的使用
    目录一、函数参数二、程序的顺序点三、小结-上四、调用约定五、可变参数六、可变参数的限制七、小结-下一、函数参数 函数参数在本质上与局部变量相同在栈上分配空间函数参数的初始值是函数调用...
    99+
    2022-11-13
  • R语言boxplot函数深入讲解
    箱线图简介 箱线图又称箱形图或盒须图,该图是由5个特征值绘制而成的图形。 5个特征值是变量的最大值、最小值、中位数、第1四分位数和第3四分位数。 连接两个分位数画出一个箱子,箱子用中...
    99+
    2022-11-11
  • C语言深入讲解链表的使用
    目录一、链表的概念二、链表的分类1. 单向或者双向链表2. 带头或者不带头(是否有自带哨兵位头结点)3. 循环或者非循环链表4. 无头单向非循环链表和带头双向循环链表3、链表的实现(...
    99+
    2022-11-13
  • C语言深入讲解动态内存分配函数的使用
    目录一、malloc二、free(用于释放动态开辟的空间)三、calloc四、realloc五、常见的动态内存分配错误六、柔性数组局部变量和函数的形参向栈区申请空间 全局变量和sta...
    99+
    2022-11-13
  • C语言深入了解函数
    目录1. 函数的概念2. 函数的分类从定义角度分从参数角度分类从返回值角度分3. 函数的定义4. 函数的声明5. 函数的调用6. 递归函数1. 函数的概念 函数是c语言的功能单位,实...
    99+
    2022-11-13
  • C语言深入浅出讲解指针的使用
    目录一、利用指针倒序字符串二、题目实例三、总结一、利用指针倒序字符串 void _reversal(char* left, char* right) { while (lef...
    99+
    2022-11-13
  • c语言深入理解函数的递归
    前言:  首先,递归是什么,递归就是在定义函数时,然后在函数里调用这个函数,通俗讲,就是函数自己调用自己。那么递归的好处是什么呢?它能够将复杂的问题,用少量的代码来表示,增加了代码的...
    99+
    2022-11-13
  • C++深入讲解函数重载
    目录函数重载概念重载依据值型别判断函数重载的规则名字粉碎-名字修饰函数重载 概念 在C++中可以为两个或者两个以上函数提供相同的函数名称,只要参数类型不同,或者参数数目不同,参数顺序...
    99+
    2022-11-13
  • C语言深入讲解语句与选择结构的使用
    目录知识点1-语句1.1 语句1.表达式语句2.控制语句3.空语句4.复合语句知识点2-选择结构2.1 if语句1.if语句的单分支2.if语句的双分支3.if语句的多分支4.if语...
    99+
    2022-11-13
  • C语言 pthread_create() 函数讲解
    pthread_create()函数详解 pthread_create是类Unix操作系统(Unix、Linux、Mac OS X等)的创建线程的函数。它的功能是创建线程(实际上就是...
    99+
    2022-11-12
  • C语言深入详解四大内存函数的使用
    目录1.memcpy2.memmove3.memcmp4.memset1.memcpy 与字符串函数 strcpy 类似,也是进行拷贝。但是需要注意的是,strcpy 是针对字符串进...
    99+
    2022-11-13
  • R语言的数据输入深入讲解
    既然了解了R语言的基本数据类型,那么如何将庞大的数据送入R语言进行处理呢?送入的数据又是如何在R语言中进行存储的呢?处理这些数据的方法又有那些呢?下面我们一起来探讨一下。 首先,数据...
    99+
    2022-11-11
  • C语言深入讲解条件编译的用处
    目录一、基本概念二、条件编译的本质三、#include 的本质四、条件编译的意义五、小结一、基本概念 条件编译的行为类似于 C 语言中的 if...else...编译是预编译指示命令...
    99+
    2022-11-13
  • C语言深入讲解宏的定义与使用方法
    目录一、C语言中的宏定义二、宏定义表达式三、宏表达式与函数的对比四、有趣的问题五、强大的内置宏六、小结一、C语言中的宏定义 #define是预处理器处理的单元实体之一#define ...
    99+
    2022-11-13
  • C语言深入讲解指针与结构体的使用
    目录1 啥是指针1.1指针与指针变量1.2总结2 指针和指针类型2.1指针+-整数3 野指针3.1 野指针的成因1指针未初始化2指针越界访问3指针指向的空间释放3.2 如何避免野指针...
    99+
    2022-11-13
  • C语言中volatile关键字的深入讲解
    1. 什么是volatile关键字? volatile用于声明一个变量,告诉编译器该变量值容易发生改变,在编译、读取、存储该变量的时候都不要做任何优化,因此编译后的程序每次需要存储...
    99+
    2022-11-12
  • C语言深入分析函数与宏的使用
    目录一、函数与宏二、宏的妙用三、小结一、函数与宏 宏是由预处理器直接替换展开的,编译器不知道宏的存在函数是由编译器直接编译的实体,调用行为由编译器决定多次使用宏会导致最终可执行程序的...
    99+
    2022-11-13
  • C语言详细讲解qsort函数的使用
    目录qsort1.int型2.float型3.struct型qsort 功能:Performs a quick sort.(快速排序)参数:void qsort( void *bas...
    99+
    2022-11-13
  • C语言深入讲解之从函数栈帧角度理解return关键字
    目录初识函数栈帧return个人总结环节初识函数栈帧 如上图可见,函数在被调用的时候会现在栈上开辟一个空间,我们称之为栈帧,之后函数内部的变量在这块区域进行空间开辟。 但是函数在调...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作