C基础8--函数

[1]函数概念


1.1 什么是函数?
	能够实现一个特定功能的代码集合,它就是一个函数。
	函数在封装的时候要遵从   "高内聚"   "低耦合"。
   (函数是c语言最基本的组成单元)	
	
1.2 函数三要素:
		1.功能唯一
		2.输入
		3.输出


1.3函数的格式:

	<存储类型><返回值类型><函数的名字>(参数列表)
	{
		语句;
		return;
	}


/*我的第一份工作遇到过这样的问题,在不同的地方需要用到同样的输出,
但是需要输出的信息比较多,那么用函数市最好的选择了,在一个地方写好,
在其他的地方进行调用,这样可以减少代码量和阅读难度*/


	例如:一个不带返回值的输出函数	  
void hello(void)
	{
		printf("hello\n");
		//return;
	}
	
	再例如: 一个带int返回值类型的加法函数
int add(int a,int b)
	{
		return (a+b);
	}

[2]函数的使用

函数的使用:先声明后使用

也就是有两种最常见的用法,因为你要先定义或者声明,才可以进行调用。
比如在函数中你想使用一个变量,那么你就要先进行定义这个变量。
在函数调用也是如此:

1.被调用的函数写在调用函数前面,相当于先进行定义
2.被调函数要是写在后面的话,需要进行声明。

		int add(int a,int b)
		{
			return (a+b);
		}
		
		int main()
		{
			int a;int b;
			add(5,6);
		}
		
	2.
		int add(int ,int );
		int main()
		{
			add(5,6);
		}
		int add(int a,int b)
		{
			return (a+b);
		}
		
	函数的参数:
		1.参数的成员的个数一般小于等于4(效率高)
		2.函数的中的参数的名字叫做形式参数
		形式参数(函数内部的变量)当函数被调用的时候
		分配内存,在函数执行结束的时候,形参所占的内存
		就会被释放。
		
		实参数:
			在main中定义的变量,int a = 5; int b =100 =>a就是实参
			add(a,b);
			实际参数可以的变量,常量,表达式,地址。
		
	
		值传递:不可以交换数据	
		地址传递:可以交换数据
		传递数据:不是将整个数据都传递过去了,
				它是将数据的首地址传递过去了。
	函数的嵌套使用:
		1.函数的嵌套
			eg1:计算 s=2^2!+3^2 !
			这个实例中我们分析出来变量需要先求平方然后在求阶乘,
			所以我分需要写两个函数进行嵌套
				
			int fun2(int k)
			{
				int mul = 1;
				for(;k>=1;k--){
					mul *= k;
				}   
				return mul;
			}
			
			int fun1(int i)
			{
				int k;
				k = i*i;
				k = fun2(k);

				return k;
			}
	
		2.递归函数 n!		
			int jiecheng(int k)  
			{
				if(k == 1)return 1;
				
				return k*jiecheng(k-1);
			}

[3]函数指针和指针函数

	指针函数
		:函数的返回值类型为指针类型。
		char *hello(int a)
		{
			char b;
			char *p = &b;
			
			return p; 错误;
		}
		
	函数指针
		:它是一个指针,指向的是一个函数。
		int (*p)(int a,int b);
		
		
		int add(int a,int b)
		{
			return (a+b);
		}

		int main(int argc, const char *argv[])
		{
			int (*p)(int,int) = add; //函数的名字就是一个地址

			printf("%d\n",p(5,6));
																										   
			return 0;
		}

	回调函数func:
		int add(int a,int b)
		{
			return (a+b);
		}

		int sub(int a,int b)
		{
			return (a-b);
		}

		int func(int a,int b,int (*p)(int ,int ))
		{
			return p(a,b);
		}

		int main(int argc, const char *argv[])
		{
			int (*p)(int,int) = add;

			printf("%d\n",p(5,6));

			printf("add = %d\n",func(5,6,add));
			printf("sub = %d\n",func(5,6,sub));

			return 0;
		}

		
	函数指针数组
		:它是数组,数组内保存的是函数指针
		int (*p[3])();
		
		
	函数指针数组指针:
		:它是一个指针,这个指针指向函数指针数组
		int (*(*t)[3])();
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值