想要理解函数,就先要理解你写的程序到底是怎么工作的。
大到一个庞杂的系统,小到一个加减乘数的计算器。其实,它们都会有一个统一的入口。叫做主函数。也就是你见过的main函数。
这点应该好理解吧,万事万物都有个开头嘛,无论之后有多复杂,哪怕复杂如宇宙,不也是从大爆炸那一个点开始的么,对吧?
同理,对于我们写的程序而言,那个main函数,就是一切复杂功能的起点。

那么问题来了,main函数里到底要写一些什么功能呢?这个时候,你就要培养自己有一个思想了:

权利越集中的地方,往往功能越单纯

你看习大大,要管理整个国家,他会亲自去干每一件事情么?当然不会,他只需要传递一个想法就行了,下面自有人去执行落实。

程序也是一样的道理。如果你的程序真的就是只用来 计算个加减乘除,除此之外没有任何其他功能。那确实没必要“拖了裤子XX”。就这点功能,直接写到主函数里就好了。比如

  1. int main ()
  2. {
  3. int a = 200;
  4. int b = 300;
  5. int result;
  6. result = a+b;
  7. return result;
  8. }

但是,如果你的程序功能复杂点呢?是不是你的主函数的内容就会越来越多了。如果所有功能都写在主函数中,不是不行,但会极其复杂。就像你要让习大大一个人,完成14亿人的工作,理论上不是不行,但实际上肯定行不通对吧。
那么,就需要其他的功能函数,来分担主函数的工作量啦。比如

  1. int main ()
  2. {
  3. int a = 200;
  4. int b = 300;
  5. int result;
  6. result = acc(a,b);
  7. return result;
  8. }
  9. int acc(int x,int y){
  10. return x+y;
  11. }

你会看到,我们把加法这个功能,封装到了 add 这个函数中,这样,主函数再想做加法的时候,不需要自己实现了,只需要调用add这个函数就可以了。
说到这里,我们可以去定义,函数到底是什么了。

函数,可以简单的理解为,完成了某一个单纯功能呢的代码块。整个程序的世界,都是由各种各样功能 的 函数组成的。 在一个程序的所有函数中,只有 一个 主函数 main。作为整个程序的入口,负责协调各个其他功能函数,一起完成程序的工作。

什么是参数

说到函数,就绕不开参数。什么是参数呢?比如你要让张三 替你去 银行取钱。那么,你总要告诉张三你的银行卡卡号和密码吧,不然他怎么取钱?此时,这个卡号,和密码。就是取钱工具人 张三 需要的“参数”。
一样的道理,我们说过,函数是完成某个功能的代码块。根据完成的功能的不同,需要的参数也不同。

让张三取款的函数,需要的参数:银行卡,密码 让张三存款的函数,需要的参数:钱,银行卡 让张三抢银行的函数,不需要参数。 。。。

参数还有值传递 和 指针传递 的区别。不知道你们现在考不考。需要的话,你再单独问我。

什么是返回值

这个更好理解了吧,每个函数,总要有执行结果。有的执行结果不需要告诉调用方,那就把返回值定义成 void类型。表示空。有的返回值,需要报告你调用方,比如加法函数。那就需要定义一个int类型的返回值。来返回x+y的计算结果。

如何定义和调用函数

这一部分,就单纯的时语法知识了。每种语言的语法不一样。但大体意思是一致的。我们以c语言为例进行讲解。你按照序号看

  1. //1. 这是主函数,是一个程序的入口
  2. int main ()
  3. {
  4. //2 我是银行账户的余额,现在是100块钱
  5. int totalAmount=100;
  6. //3我想让张三去银行帮我存钱,存完后告诉我卡里的余额是多少
  7. //4.我给张三的时,银行卡号(地址),和500现金.
  8. //这是函数调用,就直接在其他函数中,写你要调用的函数名,传递需要的参数即可。
  9. //result就是调用zhangsan函数后,返回的返回值。
  10. int result = zhangsan(&totalAmount,500);
  11. return 0;
  12. }
  13. //5.我是张三,是一个只会存钱的工具人;这里是我的方法声明。
  14. int zhangsan(int *cardNo, int amount);
  15. //6.我是张三存钱方法的实现
  16. int zhangsan(int *cardNo, int amount)
  17. {
  18. //7.我是张三,对方给我的是银行卡号(指针),我要先拿到卡里的余额(值)是多少.
  19. int yue = *cardNo;
  20. //8.然后我要把余额和本次要存的钱,进行加法运算
  21. yue = yue+amount;
  22. //9.然后我要把新的余额写入到银行卡中
  23. *cardNo = yue;
  24. return *cardNo;
  25. }

上面的函数,涉及到指针操作,不知道你们接触了没有。如果没接触过,也不要紧,你理解函数到底是什么概念就行。