Go语言学习之&和 *区别|Go主题月

·  阅读 263
Go语言学习之&和 *区别|Go主题月

作者:看那个码农

公众号:看那个码农

上期内容介绍了Go语言学习之创建接口|Go主题月

  • 什么是接口
  • 接口声明的格式
  • 实现接口的条件

本篇内容将继续带领大家走进Go语言的世界。

1.本文简介

Go语言学习之&*区别

2.什么是“&”

众所周知,在Go语言中变量会将它们的值存储在计算机的随机访问存储器里面,而值的存储位置则是该变量的内存地址,通过使用&表示的地址操作符,可以得到指定变量的内存地址

例如下面案例所示:

package main

import (
   "fmt"
)

func main() {
   node :=10
   fmt.Printf("node的内存地址为:%v",&node)
}
复制代码

输出为:

image.png

3.什么是“*”

正如上面的案例所示,地址操作符&提供的是变量的内存地址,而*则是提供内存地址指向的值

例如下面的案例所示:

package main

import (
   "fmt"
)

func main() {
   node :=10
   fmt.Printf("node的内存地址为:%v\n",&node)
   address:= &node
   fmt.Printf("node的值为:%v",*address)
}
复制代码

输出为:

image.png

与此同时,*也用来表示一个变量是指针类型

例如下面案例所示:

package main

import "fmt"

func main() {
   str := new(string)
   *str = "Chongqing"
   fmt.Println(*str)
}
复制代码

输出为:

image.png

4.“&”与“*”相结合使用的案例

package main

import (
   "fmt"
)

func main() {
   //准备一个字符串类型
   var str = "Hello World"

   //对字符串取地址,p的类型为*string
   p := &str

   //打印p的类型
   fmt.Printf("p的类型为:%T\n", p)

   //打印p的指针地址
   fmt.Printf("p的指针地址为:%p\n", p)

   //对指针进行取值操作
   value := *p

   //取值后的类型
   fmt.Printf("value的类型为:%T\n", value)

   //指针取值后就是指向变量的值
   fmt.Printf("变量value的值为:%v\n", value)
}
复制代码

输出为:

image.png

5.总结

综上我们得到结论:

  • & 是取地址符号 , 即:取得某个变量的地址 , 如: &a
  • *是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值。

如果你觉得这篇内容对你有帮助的话:

1、点赞支持下吧,让更多的人也能看到这篇内容

2、关注公众号:看那个码农,我们一起学习一起进步。

分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改