go之变量、指针、引用地址

一、值类型

  • 定义和说明
定义:变量直接指向存在内存中的值,我们称之为值类型。

值类型的变量的值存储在栈中。
值类型 将一个变量赋值给另一个变量 被称为值拷贝
  • 实例
package main

import "fmt"

func main(){
    var num1,num2 int
    num1 = 10
    num2 = num1 // 值类型赋值操作

    fmt.Println(num1,num2) // 10 10

    num1 = 20
    fmt.Println(num1,num2) // 20 10
}

二、指针类型

  • 定义
一个变量指向内存中值所在的内存地址,我们称这个变量为指针类型

go 语言中的指针与C/C++ 中的指针用法是一样的,只是出于安全性的考虑go增加了:
    1、不同类型的指针不能互相转化
    2、任何普通指针类型*T和uintptr之间不能互相转化
    3、指针变量不能进行运算
  • 实例
package main

import "fmt"

func main(){
    var num int = 100
    var ptr *int  // 类型前 加 * 表示这是指针类型,指针类型的初始值为nil ,和其他语言的NUll,None一样
        ptr = &num // & 取num 变量的内存地址。 因为ptr 是指针,指向的是内存地址,所以需要赋值操作的是内存地址
        fmt.Println("ptr 指针的值:",ptr)
        fmt.Println("*ptr 指针的值:",*ptr) // * 取指针内存地址所指向的值

        num = 200
        fmt.Println("*ptr 指针的值:",*ptr)

}
结果:
ptr 指针的值: 0xc000048080
*ptr 指针的值: 100
*ptr 指针的值: 200
  • *ptr 没有操作,为什么值发生了变化
ptr 是指针类型,并被赋予了 num 的内存地址,当num值发现变化时,实际也就是 ptr 内存地址所对应的值变了
因为 ptr内存地址所对应的 内存值就是num的值

三、值与内存地址与指针

1、变量是抽象出来的概念,go语言程序运行时即表示内存值
2、内存地址即 内存值所在的内存空间的编号
3、指针变量:是一种占位符,用于引用计算机的内存地址。可理解为内存地址的标签

四、取地址与解引用

  • 说明
在go语言中我们可以通过
    & 是取地址符号 , 即取得某个变量的地址 , 如 ; &a
    * 是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值
  • 运用
package main

import "fmt"

func main(){
    var n1,n2,n3 int
    n1 = 100
    n2 = 200
    n3 = 3
    swap(&n1,&n2) // 传内存地址
    add(&n3) // 取内存地址
    fmt.Println(n1)  // 200
    fmt.Println(n2) // 100
    fmt.Println(n3) // 4


    var num *int  // 申明一个int 指针类型
    num = &n3  // 所以可以赋值 内存地址
    add(num)
    fmt.Println("num指针变量的内存值:",*num) // *num == 5 
    // 此时n3 == 5
}


// 传入 两个指针类型的数据.
func swap(i,j *int){
    *i,*j = *j,*i // 值的替换
}

func add(num *int){
    // *num 解引用
    *num = *num + 1
}

五、引用类型

在go语言中目前引用类型有: 切片、map、chan、func
引用类型可以简单的理解为指针
这个后面会介绍

如果喜欢看小说,请到183小说网

转载于:https://www.cnblogs.com/xiaobaiskill/p/10624202.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值