Go 语言学习笔记-指针、切片与结构体

2020-04-06  本文已影响0人  梁坤同学

指针

指针就是地址。指针变量就是存储地址的变量

指针使用

&p : 引用
*p : 解引用、间接引用

栈帧

用来给函数运行提供内存空间。取内存于 stack 上。

当函数调用时,产生栈帧。函数调用结束,释放栈帧。

指针使用注意

空指针:未被初始化的指针。

var p *int
fmt.Println(*p)  --> err

格式化输出

%q:以 Go 语言格式显示字符串。默认带有 "" 符
%v:显示对应数据详细信息

变量存储

func swap(x, y *int)  {
    *x, *y = *y, *x
}

等号左边的变量:代表变量所指向的内存空间。(写)
等号右边的变量:代表变量内存空间存储的数据值。(读)

指针的函数传参(传引用)

传地址(引用):将形参的地址值作为函数参数传递。
传值(数据):将实参的值拷贝一份给形参
传引用:在 A 栈帧内部,修改 B 栈帧中的变量值

切片

为什么用切片

  1. 数组的容量固定,不能自动拓展。
  2. 值传递。数组作为函数参数时,将整个数组值拷贝一份给形参。

在 Go 语言中,几乎可以在所有的场景中,使用切片替换数组使用。

切片的本质:

不是一个数组的指针,是一种数据结构体,用来操作数组内部元素。

// runtime/slice.go
type slice struct {
  *p
  len
  cap
}

切片的使用

map

字典、映射,key-value, key:唯一、无需。不能是引用类型数据。

结构体

结构体是一种数据类型。类型定义,地位等价于 int、byte、bool、string…,通常放在全局位置。

type Person struct {
  name string
  sex  byte
  age  int
}

普通变量定义和初始化

普通变量的赋值和使用

结构体变量的比较

结构体地址

结构体变量的地址 == 结构体首个元素的地址

结构体传参

指针变量定义和初始化

p := new(Person)
p.name = "name"
p.age = 10

指针索引成员变量

结构体地址

结构体指针变量的值 == 结构体首个元素的地址

结构体指针传参

结构体指针作函数返回值

字符串处理函数

上一篇 下一篇

猜你喜欢

热点阅读