GO语言基础教程12——指针

简介: 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。

GO语言基础教程12——指针


GO语言基础教程12——指针


区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。


Go语言中的指针不能进行偏移和运算,因此Go语言中的指针操作非常简单,我们只需要记住两个符号:&(取地址)和*(根据地址取值)。


指针地址和指针类型


每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用&字符放在变量前面对变量进行“取地址”操作。

ptr := &v

例如:

func main() {
  a := 10
  b := &a
        fmt.Printf("a:%d ptr:%p\n", a, &a) // a:10 ptr:0xc00001a078
  fmt.Println(&b)                    // 0xc00000e018
}


指针取值


在对普通变量使用&操作符取地址后会获得这个变量的指针,然后可以对指针使用*操作。


例如:

func main() {
  //指针取值
  a := 10
  b := &a
  c := *b // 指针取值(根据指针去内存取值)
        fmt.println(c) // 10
}

取地址操作符&和取值操作符*是一对互补操作符,&取出地址,*根据地址取出地址指向的值。


指针传值:

func text1(x int) {
  x = 100
}
func text2(x *int) {
  *x = 100
}
func main() {
  a := 10
  text1(a)
  fmt.Println(a) // 10
  text2(&a)
  fmt.Println(a) // 100
}


new


注意: 不能直接声明指针然后赋值


可以通过new()方法来进行初始化。


例如:

func main() {
  a = new(int)
  *a = 10
  fmt.Println(*a)
}
相关文章
|
5天前
|
Go
go语言map、实现set
go语言map、实现set
12 0
|
5天前
|
Go
go语言数组与切片
go语言数组与切片
14 0
|
1天前
|
JSON 算法 测试技术
在go语言中调试程序
【6月更文挑战第29天】Go语言内置`testing`包支持单元测试、基准测试和模糊测试。`go test`命令可执行测试,如`-run`选择特定测试,`-bench`运行基准测试,`-fuzz`进行模糊测试。
12 2
在go语言中调试程序
|
4天前
|
Devops Go 云计算
Go语言发展现状:历史、应用、优势与挑战
Go语言发展现状:历史、应用、优势与挑战
|
5天前
|
Go
go语言的hello,world
go语言的hello,world
10 1
|
3天前
|
编译器 Go C++
必知的技术知识:go语言快速入门教程
必知的技术知识:go语言快速入门教程
|
4天前
|
编译器 Go 开发者
|
4天前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
4天前
|
C语言
指针进阶(回调函数)(C语言)
指针进阶(回调函数)(C语言)
|
4天前
|
存储 C语言 C++
指针进阶(函数指针)(C语言)
指针进阶(函数指针)(C语言)