Golang指针,for循环

一、指针

基本介绍

  1. 基本数据类型,变量存的就是值,也叫值类型
  2. 获取变量的地址,用&,比如: var num int, 获取 num 的地址:&num 分析一下基本数据类型在内存的布局.
    Golang指针,for循环_第1张图片
  3. 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值 比如:var ptr *int = &num

举例说明:指针在内存的布局.
Golang指针,for循环_第2张图片
4. 获取指针类型所指向的值,使用:*,比如:var ptr int, 使用ptr 获取 ptr 指向的值
Golang指针,for循环_第3张图片
5) 一个案例再说明
Golang指针,for循环_第4张图片

例子

  1. 写一个程序,获取一个 int 变量 num 的地址,并显示到终端
  2. 将 num 的地址赋给指针 ptr , 并通过 ptr 去修改 num 的值.
func main() {
	var n int = 10
	fmt.Println("n的地址是",&n)

	var ptr *int = &n
	*ptr = 9
	fmt.Println("n的值是%d", n)
}

练习
Golang指针,for循环_第5张图片
指针的使用细节

  1. 值类型,都有对应的指针类型, 形式为 *数据类型,比如 int 的对应的指针就是 *int, float32
    对应的指针类型就是 *float32, 依次类推。
  2. 值类型包括:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 struct

值类型和引用类型

  • 值类型和引用类型的说明
  1. 值类型:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 struct

  2. 引用类型:指针、slice 切片、map、管道 chan、interface 等都是引用类型

  • 值类型和引用类型的使用特点
  1. 值类型:变量直接存储值,内存通常在栈中分配
    示意图:
    Golang指针,for循环_第6张图片

  2. 引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆 上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由 GC 来回收
    示意图:
    Golang指针,for循环_第7张图片

  3. 内存的栈区和堆区示意图

Golang指针,for循环_第8张图片

二、for循环

  • 字符串遍历方式 1-传统方式
	var str string = "hello,world!"
	for i := 0; i < len(str); i++ {
		fmt.Printf("%c \n", str[i])
	}

Golang指针,for循环_第9张图片
字符串遍历方式 2-for - range

	str = "abc~ok"
	for index, val := range str {
		fmt.Printf("index=%d, val=%c \n", index, val)
	}

Golang指针,for循环_第10张图片
如果我们的字符串含有中文,那么传统的遍历字符串方式,就是错误,会出现乱码。原因是传统的
对字符串的遍历是按照字节来遍历,而一个汉字在 utf8 编码是对应 3 个字节。 如何解决 需要要将 str 转成 []rune 切片.=> 体验一把

	var str string = "hello,world!北京"
	str2 := []rune(str) //将str转换为[]rune切片
	for i := 0; i < len(str); i++ {
		fmt.Printf("%c \n", str2[i])
	}
	fmt.Println()
	var str string  = "abc~ok上海"
	for index, val := range str {
		fmt.Printf("index=%d, val=%c \n", index, val)
	}

Golang指针,for循环_第11张图片

你可能感兴趣的:(Golang,指针,golang)