Go语言数据结构指针知多少?
Posted lianzhilei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言数据结构指针知多少?相关的知识,希望对你有一定的参考价值。
指针
本章围绕字符串、数字、数组、切片、map、channel、结构体与指针赋值及函数传参的应用剖析
字符串
字符串本身也是StringHeader的结构体,包含Data指针与字符串长度,如下
type StringHeader struct Data uintptr Len int
Data指向的内存地址不可更改,字符串赋值和传参只是拷贝了StringHeader中Data和Len的值
package main import "fmt" func main() str := "Hello World!" var data string data = str // 拷贝str中Data与Len fmt.Println(data) data = "Hello Go!" // 修改data的值 在内存中生成新的StringHeader结构体 并赋值给data fmt.Println(data) // str内存未改变 fmt.Println(str) //Hello World! //Hello Go! //Hello World!
当声明变量为字符串指针时,变量赋值时对象一定是字符串内存地址,函数传参时拷贝的也是内存地址而已
package main import "fmt" func main() str := "Hello World!" var ptr *string // 错误方法 str是字符串类型非指针类型 //ptr = str // 正确方式 获取str的地址 赋值给ptr ptr = &str fmt.Println(ptr) fmt.Println(*ptr) //0xc0000421c0 //Hello World!
以上是关于Go语言数据结构指针知多少?的主要内容,如果未能解决你的问题,请参考以下文章