Golang指针用法 - Go语言中文社区

Golang指针用法


指针

简介:

  1. 基本数据类型,变量存的就是值,也叫值类型
  2. 获取变量的地址,用&,比如:var num int, 获取num的地址:&num
  3. 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值
    比如:var ptr *int =&num
    举例说明:指针在内存的布局
  4. 获取指针类型所指向的值,使用:*,比如:var ptr *int,使用 *ptr获取ptr指向的值

如图:

指针说明

  • 代码演示
package main

import "fmt"

func main() {
	// 2) 获取变量的地址,用&,比如:var num int, 获取num的地址:&num
	// 分析一下基本数据类型在内存的布局
	var i int = 10
	// i 的地址是什么, &i
	fmt.Println("i的地址=", &i)

	// 3) 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值
	// 比如:var ptr *int =&num
	// 举例说明:指针在内存的布局

	// 例如:var ptr *int = &i
	// 1、ptr 是一个指针变量
	// 2、ptr 的类型 *int
	// 3、ptr 本身的值&i
	var ptr *int = &i
	fmt.Printf("ptr=%vn", ptr)

	// 4) 获取指针类型所指向的值,使用:*,比如:var ptr *int,使用*ptr获取ptr指向的值
	fmt.Printf("ptr 的地址=%vn", &ptr)
	fmt.Printf("ptr 指向的值=%v", *ptr)
}

定义指针变量: *指针变量名
取指针地址操作: &变量名
取值操作: *指针变量名(这里星号同定义指针变量操作,只不过两者不是一个东西,要注意区分)

  • 指针使用注意点:
  1. 值类型,都有对应的指针类型,形式为 *数据类型,比如 int 的对应值指正就是 *int,float32 对应的指针类型就是 *float32,以此类推
  2. 值类型包括:基本数据类型 int 系列,float 系列,bool,string、数组合结构体 strut
  • 扩展
    值类型和引用类型的使用特点
  1. 值类型:基本数据类型 int 系列,float 系列, bool,string、数组合结构体struct

    1. 值类型:变量直接存储值,内存通常在栈中分配
      例:var num = 100 ====> 内存(num–>100)
      值类型示意图
  2. 引用类型:指针、slice切片、map、管道chan、interface 等都是引用类型

    1. 引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆上分配,
      当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由GC来回收
      例:引用类型:ref ====> 内存(ref–>地址–>值)
      引用类型示意图
  3. 内存的栈区和堆区
    内存(栈区[值类型数据,通常是在栈区], 堆区[引用类型,通常在堆区分配空间])
    内存和栈区示意图

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43649264/article/details/110818024
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢