C语言之函数

C语言函数是C语言程序中的基本构建模块,用于实现特定的功能。在C语言中,函数包含了一系列的语句,用于完成特定的任务。通过函数,可以将程序分解为更小的模块,提高代码的可读性和可维护性。函数通常包括函数名、参数列表、返回类型、函数体等组成部分,通过函数名和参数列表来调用函数并执行其中的代码逻辑。


一、重构基本思想

        重构是一种通过重新组织现有代码结构,以改进代码质量、可读性和可维护性的过程。其基本思想是通过一系列小的、可控制的步骤,把代码重构到更好的设计和结构,而不改变代码的外部行为。重构的目的是使代码更易理解、更容易扩展和更新,并且更容易测试。

二、函数的意义

        对流程结构的封装,在C语言中,函数是一种封装了一组任务或操作的代码块。函数可以帮助组织代码,提高代码的复用性和可维护性。

代码示例

#include <stdio.h>
void 判断结婚(int sex, int age);//声明状态
int main()
{
	/*函数的意义:对流程结构的封装*/
	int age = 21;
	int sex = 0;//在C语言中 非0的数字(比如1)代表逻辑‘真’ 0代表逻辑‘假’
	//此例中:1 代表男  0 代表女	
	判断结婚(sex, age);//调用状态
	return 0;
}

void 判断结婚(int sex, int age)//定义状态
{
	if (sex)
	{
		if (age >= 22)
		{
			printf("男的 能\n");
		}
		else
		{
			printf("男的 不能\n");
		}
	}
	else
	{
		if (age >= 20)
		{
			printf("女的 能\n");
		}
		else
		{
			printf("女的 不能\n");
		}
	}
}

三、函数结构与状态

四、函数之间的数据传递

#include <stdio.h>
//函数的声明状态
int add(int a, int b);
int main()
{

	/*函数的前置声明*/

	/*函数的执行原理:调用时执行,执行完消失*/
	int he = add(8, 9);
	printf("%d\n",he);
	printf("%d %d\n",add(10,20),add(109,110));
	/*函数的数据(值)传递为:copy(复制)方式 */
	
	/*自定义头文件*/

	return 0;
}
//函数:定义状态
int add(int a,int b)
{
	int sum=0;
	sum=a+b;
	return sum;
}

int add_all(int a[] )
{
	int sum=0;
	int len=sizeof(a)/sizeof(a[0]);
	int i;
	for(i=0;i<len;i++)
	{
		sum+=a[i];
	}
	return sum;
}

void exchange(int a,int b)
{

	 return;
}

void swap(int*p,int *q)
{

}

 五、函数的执行原理

        函数的执行原理可以看作是一种逐层调用和返回的过程,通过栈的方式保存和管理函数的执行状态和数据。

 

六、调用栈(stack)

        在C语言中,调用栈是用来跟踪程序执行期间函数调用的一种数据结构。每当一个函数被调用时,将会在调用栈中分配一段新的内存空间,用来存储该函数的局部变量、参数值、返回地址等信息。

        调用栈是一个先进后出(FILO)的数据结构,也就是最后调用的函数会最先执行完毕并将其对应的内存空间释放。当一个函数调用另一个函数时,会将调用者函数的返回地址和一些其他相关信息压入调用栈中,然后开始执行被调用的函数。

七、入坑

使用数组作为形参

仅使用数组作为形参得到的只是一个首地址,需要另外定义一个长度(推荐的手段)

使用数组指针作为形参:

数组指针指向的是一组数,但是其数组类型中的长度是固定的不灵活

#include <stdio.h>
//函数的声明状态
int add(int a, int b);
int add_all(int a[],int len);
int add_all_2(int (*a)[10]);
int main()
{

	/*函数的前置声明*/

	/*函数的执行原理:调用时执行,执行完消失*/
	/*int he = add(8, 9);
	printf("%d\n",he);
	printf("%d %d\n",add(10,20),add(109,110));*/

	//入“坑”
	int arr[] = {4,9,8,3,5,8,7,3,10,11};
	printf("%d\n",add_all(arr,10));
	printf("%d\n",add_all_2(arr));

	/*函数的数据(值)传递为:copy(复制)方式 */
	
	/*自定义头文件*/

	return 0;
}
//函数:定义状态
int add(int a,int b)
{
	int sum=0;
	sum=a+b;
	return sum;
}

int add_all(int a[] ,int len)
{
	int sum=0;
	//int len=sizeof(a)/sizeof(a[0]);
	int i;
	for(i=0;i<len;i++)
	{
		sum+=a[i];
	}
	return sum;
}

//		数组指针
int add_all_2(int (*a)[10])
{
	int sum = 0;
	int i;
	for (i = 0; i < 10; i++)
	{
		sum += (*a)[i];
	}
	return sum;
}

八、函数的数据传递

值传递        

         牵扯到局部变量的问题,局部变量只在函数内部起作用,一旦函数执行完成,局部变量也被回收。

        数值传递是指在编程中,将一个数值作为参数传递给函数或方法。这种传递方式通过将数值的值复制给函数的参数,使得函数在执行过程中可以使用该数值进行计算或其他操作。在数值传递中,原始数值本身不会被改变,因为函数只是使用了其副本。这种传递方式通常用于简单的数据类型,如整数、浮点数等。

#include <stdio.h>
//函数的声明状态
int add(int a, int b);
int add_all(int a[],int len);
int add_all_2(int (*a)[10]);
int main()
{

	/*函数的数据(值)传递为:copy(复制)方式 */
	int a = 4, b = 6;
	printf("a = %d b = %d\n", a, b);
	/*int t;
	t = a; a = b; b = t;*/
	void exchange(int a, int b);
	exchange(a, b);
	printf("a = %d b = %d\n", a, b);
	/*自定义头文件*/

	return 0;
}

void exchange(int a,int b)
{
	int t;
	t = a; a = b; b = t;
	 return;
}

 地址传递

        在地址传递中,函数接受参数的是变量的地址(指针),而不是变量的值。通过地址传递,函数可以修改传入的变量的值,因为它直接操作的是变量的内存地址。

#include <stdio.h>
int main()
{

	/*函数的数据(值)传递为:copy(复制)方式 */
	int a = 4, b = 6;
	printf("a = %d b = %d\n", a, b);
	void swap(int* a, int* b);
	swap(&a, &b);
	printf("a = %d b = %d\n", a, b);
	return 0;
}

void swap(int*a,int *b)
{
	int t;
	t = *a;
	*a = *b;
	*b = t;
}

值传递与地址传递 

 


总结

        总的来说,函数是C语言中非常重要且灵活的概念,合理的函数设计和使用可以帮助提高程序的可维护性和可读性。

内容概要:本文档名为《赵家湾学校后大门一百三十六栋.txt》,实则是一份综合性科研仿真资源索引,集中展示了多个技术领域的Matlab/Simulink与Python代码实现项目。内容涵盖风光互补制氢合成氨系统容量-调度优化、微电网能量管理、无人机三维路径规划、图像分割、信号处理、电力系统建模、模型预测控制(MPC)、深度学习预测模型(如LSTM、Transformer)、联邦学习、强化学习应用等多个前沿方向。文档不仅列出具体研究题目和算法模型,还整合了智能优化算法(如PSO、GWO、DBO等)、路径规划、车间调度、通信优化、雷达跟踪、元胞自动机模拟等通用技术模块,并附有网盘链接提供完整代码与仿真模型下载,旨在为科研人员提供可复现的技术支持与开发参考。; 适合人群:具备一定编程基础,从事电气工程、自动化、计算机科学、人工智能、控制工程、能源系统等相关领域的研究生、科研人员及工程技术开发者。; 使用场景及目标:①辅助高水平学术论文复现与科研项目开发;②为硕士/博士论文、课程设计、学科竞赛提供算法实现与仿真建模支持;③提升在新能源并网、智能控制、路径规划、负荷预测、故障诊断等领域的工程实践与创新能力。; 阅读建议:此文档为资源导航型材料,建议结合个人研究方向筛选对应主题,通过提供的百度网盘链接获取完整代码包,并配合相关文献进行仿真实验与参数调试,以实现高效复用、二次开发与技术创新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小辉同志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值