【C语言-函数】就是你了,编程的核心

前言

学到现在,遇到的代码全部可以抽象成:“数据+函数”。它,真的很重要。


不懂就问

  1. 函数是个啥,怎么用?
  2. 函数有啥用?

函数是个啥,怎么用?

  1. 函数有参数,有函数体,有返回值,有…
  2. 如果你够强,它什么都能做

笼统的定义咱们不看,直接抽象请添加图片描述

函数体,就像工厂,把收到的参数处理后,以返回值的形式交付
若没有返回值,就看作是焚烧厂吧(它总有作用的对吧ovo)

来了解一下有哪几种函数

  1. 自定义函数

    任你玩弄~  ——  函数名、返回值类型、函数参数都可以自己设置
    
  2. 库函数

    C语言“家库”里放着的函数
    

为什么会有库函数的存在?

确实,printf,scanf这类函数可以自己写,但每个人的printf都不一样,导致标准不统一;再者说,使用频率高,直接封装成库函数,多方便。

  • 使用库函数的时候要包含头文件(本质上是把头文件的内容中拷到使用库函数的文件)

函数的声明和定义

  1. 声明:告诉编译器有这么个函数,如 int add(x,y);
  2. 定义:在{ }内实现函数
  • 函数要满足先声明后使用
  • 一般来说,声明放头文件;定义放源文件

有趣的函数参数

  1. 实际参数

     “货车送到工厂的货物” —— 可以是常量,变量等(有确定的值)
    
  2. 形式参数

     “实际参数的临时拷贝”
    

哎哟哟,这可有点混乱了,那函数工厂到底处理的是哪批货物啊?

这就取决于我们交给工厂的任务了(如何去调用它


函数调用

  1. 传值调用(小弟):给它货物,让它模仿一批货物,再处理

     让工厂照着我们给它的货物,小弟自己捣鼓
    

此时,工厂不能动我们的货物,只能自己模仿一份(临时拷贝一份)
接着就是处理处理处理…再交付

  1. 传址调用(兄弟):给它地址(处理我们货物的权限),让它直接处理货物

     直接放心地把货物交给工厂处理,兄弟,爱咋咋
    

此时,工厂可以直接处理货物

看看这区别,能获得什么启发?

函数不总是能改变实际参数

  1. 传值调用时,形参和实参互不影响
    请添加图片描述
  2. 传址调用时,形参可以通过地址找到实参,并“化身”实参,为所欲为

请添加图片描述

调用函数就是传参后跳到函数名的地址,执行被调用函数的代码


函数的用法?

  1. 链式访问

请添加图片描述
2. 嵌套调用:函数1里调用函数2


函数声明、定义和使用

  • *声明不占用内存空间; 定义占用
  1. 声明(在.h文件):如 int Add(int a,int b);

     1. 自定义的.h可以想象成自己建了一个人“库”
     2. 函数的声明就是告诉编译器有这么个函数
    
  2. 定义:

     就是实现函数
    
  3. 使用:

     用Add时,包含一下.h文件就行
    

函数递归

	通过自己调用自己,**大事化小**,减少代码量
接受一个无符号整型值,按序打印她的每一位
如 12341 2 3 4
print(1234)
print(123) 4
print(12) 3 4
print(1) 2 3 4
1 2 3 4
void print(unsigned int n)
{
	if (n > 9)
	{
		print(n / 10);//递归--- print(123)----print(12)---printf("%d ",n%10);
	}
	printf("%d ", n % 10);//不断打印最后一位
}
int main()
{
	unsigned int num = 0;
	scanf("%u", &num);
	
	print(num);
	return 0;
}

使用递归注意事项:

  1. 必须存在限制条件
  2. 每次递归后,接近限制条件

最后记住,函数一定是 独立功能鲜明

写了一个加法函数,调用以后它居然打印了结果?不合适,不理想,不聪明。


我要是写了个很牛的项目,怎么卖给别人?

现有:add.h & add.c 可实现“强大”的加法功能
若直接把这俩卖出去,源码就暴露了,人家怎么还会付你钱呢,所以
给出:add.h & add.lib

  1. add.h 中给出函数的声明,并注释上使用方法
  2. add.lib(用add.h&add.c编译出的静态库,内容是看不懂的二进制)
    则变成了你个人的“库”,别人包含了就可以用你的函数了
//add.h
#pragma once//防止头文件被重复包含
//这里告诉别人用法
//加法函数:传入两个整形,返回两个整形的和
int add(int x, int y);

//购买方的test.c
#pragma comment(lib,"add.lib")//包含静态库
#include<stdio.h>
int main()
{
	int a =10;
	int b = 20;
	int c =add(a,b);
	printf("%d\n",c)
	return 0;
}

今天的分享就到这里啦,不足之处望请斧正

培根的blog,我们共同成长!

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

周杰偷奶茶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值