Go 之基础速学 (四) golang 里面的指针的理解和实操
指针?搞php的同学们可能比较陌生,搞过java或者c的同学们可能比较熟悉,由于各种原因,指针对于使用面向对象编程的现代程序员来说可能都很陌生,不过我们这里对此会进行讲解和解释;
程序在内存当中存储它的值,每个内存块有一个地址,通常用十六进制数表示,如:0x6b0820 变量通过内存地址可以找到内存块里面的值 如下图所示:
golang里面通过&符号获取变量的内存地址 *获取内存地址上的值//指针符号讲解 案例一 var name string = "huxiaobai" fmt.Print(&name) //表示去地址 内存当中的地址 16进制的 fmt.Print(*&name) //表示先&name取内存地址然后*取出&name地址上的值 和fmt.print(name)的值是一样的 //看到*好就是取值或者设置值 看到&符号就是读内存地址
讲到这还是没明白指针是个什么东西?
指针的声明,一个指针变量指向了一个值的内存地址 指针其实是直接指向内存地址的
指针声明格式如下:var var_name *var-type var-type为指针类型,var_name为指针变量名称, *号用于指针变量是作为一个指针; var ip *int 表示指向整型 var fp *float32 表示指向浮点型
迷糊啦吧,脑袋瓜子嗡嗡的吧?
看个案例吧,仔细看里面的注释哈//指针的具体使用 案例二 //每个变量都是存储在内存块当中 每个内存块都有一个内存地址 这个内存地址当中存在一个特殊的数据类型叫做指针 //声明指针 name表示指针的名称 *string表示这是一个指向string类型的指针也就是所指向的内存地址当中的值是string类型 var name *string //上边只是生命指针 使用new来产生一个内存地址 指向一个内存块 目前内存块当中值是空的 在没有new之前是一个nil空 name = new(string) //为指针指向的内存块当中塞入值 *除了取值还有设置值的功能 *name = "wocao" //*name取出name指针指向的内存地址上的值 fmt.Print(*name)
再看个案例,还是好好看里面的注释哈:
//指针的具体使用 案例三 //常规的定义变量 没啥好说的 num := 20 //定义指针变量 并且指针类型为int类型 这话上边解释过 var anum *int //&符号可以获取内存地址 并复制给了指针 anum = &num //anum的指针指向了内存地址指向的内存款 通过*获取内存地址上的值 fmt.Print(*anum)
案例看懂了自然就懂了,不懂的话啊看手册:4.9. 指针《Go 入门指南》
本作品采用《CC 协议》,转载必须注明作者和本文链接