四时宝库

程序员的知识宝库

6. Go语言的指针类型(go语言指针和c++一样吗)

什么是指针

普通变量:先回想一下前面学习的普通变量。

// 普通变量 str 
// 直接输出 str 就可以看到我们存储的内容 "张三"
str := "张三"  

指针变量:存储的是值对应内存的地址。对 普通变量 使用 `&` 符就是取普通变量的地址,可以赋值给指针变量。

str := "张三"
name := &str

我们可以把`变量存储`比喻成去饭店吃饭,比如我们团建人比较多,我们先预定了一个包间(分配存储的空间)。我们预定完包间后,服务员问我怎么称呼,我告诉他我叫“张三”,服务员告诉我,给我预留的包间名叫 “风花雪月”, 那么相当于代码中的 "风花雪月" := "张三"。我们下班直接去饭店的“风花雪月”包间,服务员就会问,是“张三”先生一起的?这个就相当于 直接输入 fmt.Println(`变量:风花雪月`) 得到的结果是 `张三`。

指针就类似 `风花雪月` 包间对应 饭店中的位置,如果说 我们去饭店了问服务器 `风花雪月` 包间怎么走,服务员说:2楼第1个包间。其实这个 2楼第1个包间 就是 ` name := &风花雪月 ` ,当我们输出 fmt.Println(name) 时,结果是 `2楼第1个包间`,如果我们想知道 2楼第1个包间 是哪位先生预定的 就在指针变量前面加上 `*` ,即 fmt.Println(*name) ,结果就是 "张三"。

指针变量相关的两个符号:

// 变量使用  & ,称做取地址,得到的结果可赋值给指针变量
&:
var str string = "张三"
name := &str

// 打印指针变量正常输出的是地址,想输出值得在指针变量前加 *
*:
fmt.Println(*name)

指针变量创建

	// 1.  隐式定义
  var str string = "张三"
  name := &str

// 2. 显示定义
var str string = "张三
var name *string
name = &str

// 3 使用new创建,new创建的不同类型就是不同类型的指针变量
var str string = "张三
name := new(string)
name = &str

// 显式不同类型的指针,指针的零值为 nil
var str *string // 字符串指针
var i * int // 整数类型指针

总结

  1. &str 取地址符可以赋值给指针类型的变量。
  2. 输出指针变量显示的是内存地址。
  3. *str输出的是指针变量对应的实际内容。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接