【一 Go 到底】第二十二天 --- 函数参数传递方式、变量作用域
一、函数参数传递方式
1.1 传递方式(2 种)
值传递(值类型参数)
引用传递(引用类型参数)
其实,不管是值传递还是引用传递,传递给函数的都是变量的副本
,不同的是,值传递的是值的拷贝
,引用传递的是地址的拷贝
,一般来说,地址拷贝效率高
,因为数据量小,而值拷贝决定拷贝的数据大小,数据越大,效率越低
1.2 值类型和引用类型
值类型
:基本数据类型 int 系列,float 系列,bool,string,数组和结构体 struct引用类型
:指针,slice 切片,map,管道 chan,interface 等
1.3 值传递和引用传递使用特点
值类型默认是值传递,变量直接存储,内存通常在栈中分配
引用类型默认是引用传递,变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由 GC 进行回收
如果希望函数内的变量能够修改函数外的变量的值,可以传入变量的地址 &,函数内以指针的方式操作变量。
效果上类似于引用
二、变量作用域
2.1 变量作用域说明
函数内部声明/定义的变量叫局部变量,作用域仅限于函数内部。
详见函数内部变量案例
函数外部声明/定义的变量叫全局变量,作用域在整个包都有效,如果其首字母为大写,则作用域在整个程序有效。
如果变量是在一个代码块,如 for/if 中,那么这个变量的作用域仅在该代码块
2.2 案例演示
2.2.1 函数内部变量案例
复制代码
2.2.2 函数外部声明案例
在其他文件也可以引用(大写字母开头)
复制代码
2.3 作用域案例练习
复制代码
三、函数练习
3.1 打印金字塔
根据用户输入,打印对应层数的金字塔
复制代码
3.2 打印九九乘法表
复制代码
版权声明: 本文为 InfoQ 作者【指剑】的原创文章。
原文链接:【http://xie.infoq.cn/article/042f2aaca58d89c13c65f8440】。文章转载请联系作者。
评论