码迷,mamicode.com
首页 > 编程语言 > 详细

Go语言【数据结构】指针知多少?

时间:2019-09-21 19:11:37      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:地址   map   函数   print   拷贝   对象   var   更改   type   

指针

  本章围绕字符串、数字、数组、切片、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语言【数据结构】指针知多少?

标签:地址   map   函数   print   拷贝   对象   var   更改   type   

原文地址:https://www.cnblogs.com/lianzhilei/p/11563853.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!