zoukankan      html  css  js  c++  java
  • golang-指针类型

    tips: *号,可以指向指针类型内存地址上的值,&号,可以获取值类型的内存地址

    变量和内存地址

    每一个变量都有内存地址,可以通过变量来操作内存地址中的值,即内存的大小

    go语言中获取变量的内存地址方法:通过&符号可以获取变量的地址

    var a int32
    a = 100
    fmt.Printf(“%d
    ”, a)     //变量的值
    fmt.Printf(“%p
    ”, &a)	 //变量的内存地址
    

    数据类型

    值类型

    定义:普通变量存储的是对应类型的值,这些类型就叫值类型

    var b int32
    b = 156
    fmt.Printf(“%d
    ”, b)
    fmt.Printf(“%p
    ”, &b)
    

    变量b,在内存中的地址为:0x1040a124,在这个内存地址上存储的值为:156

    指针类型(引用类型)

    定义:指针类型的变量存储的是⼀个地址,所以⼜叫指针类型或引⽤类型

    var b int32
    b = 156
    var a *int32
    a = &b
    

    b 是值类型,它指向的是内存地址上的值

    a是指针类型,它指向的是b的内存地址

    指针类型的定义

    指针类型定义,语法: var 变量名 *类型

     b := 255
     var a *int = &b
     fmt.Printf("Type of a is %T
    ", a)
     fmt.Println("address of b is", a)
    

    指针类型在定义完成后,默认为空地址,即空指针(nil)

    操作指针类型变量

    在定义好指针变量后,可以通过***** 符号可以获取指针变量指向的变量

     b := 255
     a := &b
     fmt.Println("address of b is", a)
     fmt.Println("value of b is", *a)
     *a++
     fmt.Println("new value of b is", b)
    

    在这里的 *a 等价于 b,通过修改 *a ,最终修改的是值类型b的值

    之前学过的切片是引用类型

    内存的分配

    make⽤来分配引⽤类型的内存,⽐如 map、slice以及channel

    new⽤来分配除引⽤类型的所有其他类型的内存,⽐如 int、数组等

    值类型和指针类型的拷贝

    值类型的拷贝是深度拷贝,会将给拷贝的值创建一个新的内存空间,存储值

    指针类型的拷贝是浅拷贝,拷贝后的值,指向的内存地址和原值的内存地址一样,修改其中一个值,这个内存地址上的值都会改变

     var a int = 100
     var b *int = &a
     var c *int = b
     var d int = a
     *c = 200
    

    这里a,d是值类型,b,c是指针类型

    d就相当于把a内存地址上值,在内存中从新开辟了一块空间存储,d和a互不影响

    b,c相当于指向了a的内存地址,当使用*号引用出内存地址上的变量上,修改值得,a的值也会跟着改变

  • 相关阅读:
    平均值滤波之经典形式改进
    Matlab编程实例(4) 相位角与相关系数曲线
    Matlab编程实例(3) 函数向左或向右平移N点 左移右移
    Matlab编程实例(2) 同期平均
    Matlab编程实例(1) 移动平均
    使用js在网页上记录鼠标划圈的小程序
    《你不知道的JavaScript》整理(五)——值与原生函数
    Vuex 学习总结
    HTML移动端开发常见的兼容性总结
    一步一步实现字母索引导航栏
  • 原文地址:https://www.cnblogs.com/fan-yi/p/13793684.html
Copyright © 2011-2022 走看看