-
Notifications
You must be signed in to change notification settings - Fork 56
/
Copy pathmain.go
38 lines (32 loc) · 1.94 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main
import (
"fmt"
)
//函数值传递与引用传递
//我们在讲解函数注意事项和使用细节时,已经讲过值类型和引用类型了,这里我们再系统总结一 下,
//因为这是重难点,值类型参数默认就是值传递,而引用类型参数默认就是引用传递。
//其实,不管是值传递还是引用传递,传递给函数的都是变量的副本,不同的是,值传递的是值的
//拷贝,引用传递的是地址的拷贝,一般来说,地址拷贝效率高,因为数据量小,而值拷贝决定拷贝的 数据大小,数据越大,效率越低。
//值类型和引用类型
//值类型:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 struct
//引用类型:指针、slice 切片、map、管道 chan、interface 等都是引用类型
func main() {
var i int = 5
for i := 0; i < 10; i++ {
fmt.Println("i=", i)
}
fmt.Println("i=", i)
}
var Age int = 20
//下面的语句等价与赋值语句 赋值语句不能在函数体外部,无法通过编译
//Name := "Tom"
//细节说明
//1.值类型默认是值传递,变量直接存储值,内存通常在栈中分配
//2.引用类型默认是引用传递,变量存储的是一个地址,变量存储的是一个地址,这个地址对应的空间才是真正存储数据的值
//内存通常在堆上分配,当没有任何变量引用这个数据的时候,会被GC回收
//3. 如果希望函数内的变量能修改函数外的变量,可以传入变量的地址&,
// 函数内以指针的方式操 作变量。从效果上看类似引用。
//变量作用域
//1.函数内部声明/定义的变量叫局部变量,作用域仅限于函数内部
//2.函数外部声明/定义的变量叫全局变量,作用域在整个包都有效,如果其首字母为大写,则作用 域在整个程序有效
//3.如果变量是在一个代码块,比如 for / if 中,那么这个变量的的作用域就在该代码块