• 函数参数的传递方式和变量作用域


    函数参数的传递方式:

    基本介绍:

      我们在讲解函数注意事项和使用细节时,已经讲过值类型和引用类型了,这里我们在系统总结一下,因为这是重难点,值类型参数默认就是值传递,而引用类型参数默认就是引用传递。

    两种传递方式:

      1)值传递
      2)引用传递

      其实,不管是值传递还是引用传递,传递给函数的都是变量的副本,不同的是,值传递的是值的拷贝,引用传递的是地址的拷贝,一般来说,地址拷贝效率高,因为数据量小,而值拷贝决定拷贝的数据大小,数据越大,效率越低。


    值类型和引用类型:

      1)值类型:基本数据类型 int 系列,float系列,bool,string、数组和结构体struct
      2)引用类型:指针、slice切片、map、管道chan、interface 等都是引用类型

    变量作用域:

    说明:

    1)函数内部声明/定义的变量叫局部变量,作用域仅限于函数内部

    func test() {
      //age 和 Name 的作用域就只在test函数内部
      age := 10
      Name := "tom~"
    }

    func main() {
      //这里是不能调用上面函数的变量的。
    }


    2)函数外部声明/定义的变量叫全局变量,作用域在整个包都有效,如果其首字母为大写,则作用域在整个程序有效。

    package main
    import (
      "fmt"
    )

    var age int = 50
    var Name string = "jack~"

    func test() {
      //age 和 Name 的作用域就只在test函数内部
      age := 10
      Name := "tom~"
      fmt.Println("age = ", age)   //10
      fmt.Println("Name = ", Name)   //tom~
    }

    func main() {
      fmt.Println("age = ", age)   //50
      mt.Println("Name = ", Name)   //jack~

      test()
    }


    3)如果变量是在一个代码块,比如 for / if 中,那么这个变量的作用域就在该代码块。

      for i := 0; i <= 10; i++ {
        fmt.Println("i=", i)
      }
      // fmt.Println("i=",i)   这里就调用不了for循环中的变量i

    练习题:

    思考:下面的代码输出什么内容?

    var Age int = 20   //ok
    Name := "tom"   //这句话相当于执行了下面两句 var Name string  Name = "tom" 所以在编译的时候会报错,赋值语句是不能在函数体外。
    func main() {
      fmt.Println("name",Name)
    }

  • 相关阅读:
    Loadrunner的Tuxedo脚本分析,基本流程和基本函数介绍
    安装ArcGIS Server 9.2的一些建议
    .obj,.lib,.dll,.h之间的相互关系
    中国Albers 投影参数设置参考资料
    投影常识
    vc++2005环境中静态调用DLL(隐式)
    设置GDAL_DATA环境变量
    开源代码搜索利器Koders
    更正GDAL_DATA设置一文错误
    2007年的元宵节
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11355166.html
Copyright © 2020-2023  润新知