zoukankan      html  css  js  c++  java
  • 函数参数的传递方式和变量作用域

    函数参数的传递方式:

    基本介绍:

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

    两种传递方式:

      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)
    }

  • 相关阅读:
    leetcode 131. Palindrome Partitioning
    leetcode 526. Beautiful Arrangement
    poj 1852 Ants
    leetcode 1219. Path with Maximum Gold
    leetcode 66. Plus One
    leetcode 43. Multiply Strings
    pytorch中torch.narrow()函数
    pytorch中的torch.repeat()函数与numpy.tile()
    leetcode 1051. Height Checker
    leetcode 561. Array Partition I
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11355166.html
Copyright © 2011-2022 走看看