Golang指针,for循环

一、指针

基本介绍

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

举例说明:指针在内存的布局.
在这里插入图片描述
4. 获取指针类型所指向的值,使用:*,比如:var ptr int, 使用ptr 获取 ptr 指向的值
在这里插入图片描述
5) 一个案例再说明
在这里插入图片描述

例子

  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)
}

练习
在这里插入图片描述
指针的使用细节

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

值类型和引用类型

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

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

  • 值类型和引用类型的使用特点
  1. 值类型:变量直接存储值,内存通常在栈中分配
    示意图:
    在这里插入图片描述

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

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

在这里插入图片描述

二、for循环

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

在这里插入图片描述
字符串遍历方式 2-for - range

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

在这里插入图片描述
如果我们的字符串含有中文,那么传统的遍历字符串方式,就是错误,会出现乱码。原因是传统的
对字符串的遍历是按照字节来遍历,而一个汉字在 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)
	}

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩波的笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值