介绍

介绍

福哥今天要给大家讲讲编程里的重头戏——函数(function),有了函数,程序才是程序,为什么这么说呢?因为如果没有函数语法,所有重复工作(包括类似工作)都要重复编写代码,那样就失去了编程的价值。打个比喻说:如果程序没有函数,就好像做数学题没有公式一样,每次做类似的题目的时候,都要从头去用最原始是方法进行解题,这是不可想象的。

所以说,有了函数,我们编写的程序才可以越做越大,我们才可能做出大型程序。当然,如果要做超大型程序,还需要学会对象(class)才行

在c/c++里是支持函数的,在php里也是支持函数的,不过java是纯粹的OOP架构是没有函数的

函数语法

函数可以理解为一个公式,包含若干未知数(参数),未知数给了参考值,其结果(返回值)自然就得出来了,其语法如下

returnValue functionName (argument1, argument2, argument3 ... argumentN)

  • returnValue:函数返回值
  • functionName:函数名称
  • arguments:函数参数

函数包括函数声明和函数定义两个部分,声明就是定义函数名称、参数、返回值,定义就是实现函数里程序逻辑

函数声明

函数声明的意思就是只定义函数的名称、参数、返回值,而不去编写函数里面的程序逻辑,这在c/c++里有特定的意义,c/c++编程包括 .h(头文件)和 .cpp(程序文件),函数声明写在头文件里,函数定义写在程序文件,在发布程序库的时候函数定义是编译成二进制的,只能依赖头文件里的函数声明告诉使用者函数是什么样的

函数定义

函数定义的意思就是在做好函数声明之后开始编写函数里面的程序逻辑,函数定义也包括函数名称、参数、返回值,这在c/c++和php里都是一样的

c/c++示例

定义了addCapacityToFuge,用来输出一句话,再将capacityCont加一

int addCapacityToFuge(const char* capacity, int capacityCount) {    // print    cout <

php示例

定义了addCapacityToFuge,用来输出一句话,再将capacityCont加一

注意:这里php的函数定义语法稍有不同,除了没有参数类型和返回值类型外,还需要在函数名称前面增加function关键字,这有助于php解析器的执行效率

function addCapacityToFuge($capacity, $capacityCount) {    // print    print "福哥会写" . $capacity . "编程代码";    // count    $capacityCount++;    return $capacityCount;}$capacityCount = 0;$capacityCount = addCapacityToFuge("C/C++", $capacityCount);$capacityCount = addCapacityToFuge("Java", $capacityCount);$capacityCount = addCapacityToFuge("PHP", $capacityCount);print "福哥会" . $capacityCount . "种编程语言!";

函数参数

函数参数构成了函数的价值重要的组成部分,如果没有参数,函数所做的事情是完全不变的,有了参数就可以使函数完成类似缺又不完全相同的事情

函数参数个数

函数参数就是一个一个的变量定义,一个函数理论上可以有无限多个参数

函数参数类型

函数参数的类型和我们编程时候定义一个变量是基本一样的,每一个参数需要不同的名字,每一个参数需要给定参数类型,但是php这种弱类型语言不需要指定参数类型

函数参数传入方式

这个比较难理解,函数传入方式有两种,一种是复制传递(默认),另一种是引用传递

复制传递

复制传递是默认传递方式,就是我们传入的变量在传入函数的一瞬间会被自动克隆一份,如果参数在函数里面被修改了,不会影响调用函数程序代码里的变量的值

引用传递

引用传递和复制传递相反,就是我们传入的变量在传入函数的一瞬间不会被自动克隆,如果参数在函数里面被修改了,调用函数程序代码里的变量也会变化

函数返回值

函数在执行完成后可以返回一个变量给调用这个函数的代码使用,这个返回的的变量就是函数返回值

函数返回值类型

函数返回值的类型和我们编程时候定义的一个变量是基本一样的,需要给定返回值类型,但是php这种弱类型语言不需要参数类型

作用域

这个作用域比较抽象,打个比喻说:一段代码里会有很多的变量,如果把这些变量当作人的话,就是一群人在一个空场里,在这个空场里每个人都可以找到每个人,人可以被找到的范围就是这个人的作用域;函数假设是一个商场,商场大门就是调用函数的点,在空场里的人商场里是看不到的,商场里的人在空场也看不到,所以商场是另一个作用域

函数定义的作用域仅仅是函数定义里面的程序代码,它和函数调用的作用域是不通的,简单说就是:在函数调用的地方定义的变量在函数定义里面是无法使用的,反过来也是一样的,在函数定义里定义的变量在函数调用的地方也无法访问到

注意:在函数内调用另一个函数,或者调用函数自己,一样是不同的作用域

总结

函数就是一个处理一些事情的独立程序代码,可以传入函数参数来实现类似事情的处理操作,可以通过函数返回值来讲处理结果带回到调用函数的程序使用

有了函数,我们就可以编写较为大型的程序了

https://m.tongfu.net/home/35/blog/512757.html

函数返回引用什么意思_【20200917】编程入门第七课,函数(function)相关推荐

  1. C# 编程入门第七课方法调用参数问题,方法标准,传递数组,返回数组,方法高级参数(out关键字参数,ref参数,params可变参数),方法重载,方法的递归,一些常用方法

    C# 编程入门第七课 文章目录 C# 编程入门第七课 1. 方法调用参数问题 2. 方法标准 3.传递数组,返回数组 4. 方法高级参数 4.1 out 关键字参数 4.2 ref 参数 4.3 pa ...

  2. c# 编程入门第六课常量,枚举,枚举转换成其他类型变量(枚举和int,转 string字符串转枚举),结构体,数组,冒泡排序,实际使用排序,方法(函数)

    c# 编程入门第六课 文章目录 c# 编程入门第六课 1. 常量 2. 枚举 3. 枚举转换成其他类型变量 3.1 枚举和int 3.2 转string 3.2 字符串转枚举 4.结构体 5.数组 7 ...

  3. C# 编程入门第五课,VS2019程序调试,for循环,水仙花数,Console.Write,又一种类型变换,三元表达式,产生随机数

    C# 编程入门第五课 文章目录 C# 编程入门第五课 1. VS2019程序调试 2. for循环 3. 水仙花数 4. Console.Write() 5. 又一种类型变换 6. 三元表达式 7.产 ...

  4. C#编程入门第四课,异常,switch-case选择结构,循环结构 while,break作用,do-while循环

    C#编程入门第四课 文章目录 C#编程入门第四课 1.异常 2. switch- case选择结构 3. 循环结构 while 4. break 作用 5. do-while循环 1.异常 那行代码有 ...

  5. C# 编程入门第三课 类型转换,++,关系运算符,bool类型(布尔类型),逻辑运算符,判断闰年,结构

    C# 编程入门第三课 文章目录 C# 编程入门第三课 1. 类型转换 2. ++,-- 3. 关系运算符 4. bool 类型(布尔类型) 5. 逻辑运算符 6.判断闰年 7. 结构 1. 类型转换 ...

  6. c++ 函数返回引用

    一,c++函数的返回分为以下几种情况 1)主函数main的返回值:这里提及一点,返回0表示程序运行成功. 2)返回非引用类型:函数的返回值用于初始化在跳用函数出创建的临时对象.用函数返回值初始化临时对 ...

  7. C++基础08-this指针-const修饰成员函数-函数返回引用/值

    一.this指针 1.C++类对象中的成员变量和成员函数是分开存储的.C语言中的内存四区模型仍然有效! 2.C++中类的普通成员函数都隐式包含一个指向当前对象的this指针. 3.静态成员函数.成员变 ...

  8. C++中函数返回引用

    1. 返回引用和不返回引用的区别 下面两个代码是在类中的成员函数,而m_data_变量为类的私有成员变量. int& at() {return m_data_; } int at() {ret ...

  9. 也来谈谈函数返回引用 int fun(int x);

    我们先来看一个基本的东西, 对应一个整形的a, 有两种理解:1. a表示a这个容纳箱, 2. a表示a这个容纳箱中的值.  其实前者就是左值, 后者是右值. 大家应该是通过成个程序来认识引用的: #i ...

最新文章

  1. 嫦娥“挖土”归来有多难?看看中国首颗返回式卫星的故事
  2. 波兰极客用一张软盘运行Linux系统,用的还是最新内核!
  3. hdu1010 dfs+路径剪枝
  4. lzw编码过程详解_编码拓展——封装、编码、码率
  5. linux网络编程之sockaddr_in和in_addr区别
  6. java 栈和队列实现迷宫代码_LeetCode每日一题--剑指 Offer 09. 用两个栈实现队列(Java)
  7. 资料分享 | 数据挖掘实例资料分享来袭
  8. python怎么调用函数的返回值_python函数的返回值是什么
  9. C#的进度条--progressBar
  10. 17.基于scrapy-redis两种形式的分布式爬虫
  11. qt5以后正常显示中文(windows下 vs编译器)
  12. solr删除数据的4种方便快捷的方式
  13. 电脑自带office查看攻略
  14. 解决在win2003 enterprise上搭建IIS遇到的“需要Service Pack 2 CD-Rom 上的文件“问题
  15. docker 创建 Carte 服务
  16. js 七大继承--史上最全最易懂
  17. 诺丁汉为满足当地需求新建一个数据中心
  18. Dreamweaver CS4 解决序列号过期问题 OS XP
  19. 产品、技术:如何编写有效的流程文档?
  20. 【python机器学习】——patsy的简介、安装、使用方法之详细攻略

热门文章

  1. C/S和B/S两种架构区别与优缺点分析
  2. electron——初探
  3. MAC安装mysql8.0.11以及修改root密码
  4. 第二阶段团队每日冲刺07
  5. Nodejs--url模块
  6. wpf(c#)中获取ComboBox选项值
  7. 转自CSDNattilax的专栏 :自适应网页设计 跟 响应式 设计的区别跟原理and实践总结...
  8. sql多变量 双引号设置
  9. (转)使用异步 I/O 大大提高应用程序的性能
  10. php微服务架构设计模式,《微服务架构设计模式》读书笔记---第十一章:开发面向生产环境的微服务应用...