Go语言基础、实战 -- 7. 指针

   日期:2020-04-30     浏览:88    评论:0    
核心提示:1. 什么是指针 指针是存储内存地址的变量类型 2. 指针的声明与使用 指针的声明可以用一个已经golang

1. 什么是指针
    指针是存储内存地址的变量类型
    
2. 指针的声明与使用
    指针的声明可以用一个已经存在的变量,也可以用 new(T) 的形式:

var num int = 5
p_num := &num
fmt.Printf("[%p] [%d]\n", p_num, *p_num)        // 输出结果为:[0xc0000120a0] [5]

p_string := new(string)
*p_string = "It's Taco Tuesday, gi gi gi gi gi gi gi"
fmt.Println(*p_string)


   可以看到,它的使用与大部分语言一样,用 & 来取地址,用 * 来解引用。
   
   对于自定义类型,还有一种简便声明指针的方法:

type Human struct {
    age    int
    name string
    sex    string
}
func (p Human) String() string {
    return fmt.Sprintf("[Name: %s] [Age: %d] [Sex: %s]", p.name, p.age, p.sex)
}
func main() {
    p := &Human{34, "James", "male"}
    fmt.Println(*p)        // 输出结果为:[Name: James] [Age: 34] [Sex: male]
}

   上面的代码中,直接将结构体的初始化和指针的初始化写在一行了,是比较简洁的写法。
   至于那个String()函数是怎么回事,fmt输出结果为什么是那样,在结构体一章会讲到。

4. 指针的零值
    指针的零值是nil,不是NULL

5. 打印类型名称
    打印类型名称用 %T 占位符:

n := 5
p_int := &n
fmt.Printf("[%T] [%T]\n", n, p_int)        // 输出结果为:[int] [*int]

 

6. 指针数组和切片
    指针数组可以做到在函数传参时,函数内部的操作改变原数组的元素,但这不是Go的惯用做法,Go为我们提供了切片,直接使用切片就好。

7. 指针运算
    Go不支持指针的运算:

str := "Golang"
p_str := &str
//p_str++        // 无效的运算,编译报错

 

8. 实际应用 -- 实现自定义类型方法
   在上面的Human结构体中,我们为Human类型定义了一个String()方法,func后面的(p Human)表示这个方法是Human类型的方法,这里如果不用指针,就是一个简单的值传递,不会改变原始数据,需要注意。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服