<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Golang數(shù)據(jù)類型之指針

          共 3475字,需瀏覽 7分鐘

           ·

          2021-08-09 00:39

          目錄

          • 1、概述

          • 2、聲明

          • 3、空指針

          • 4、用指針修改值

          • 5、指針的指針



          1、概述

          每個變量在內(nèi)存中都有對應(yīng)的存儲位置,也就是內(nèi)存地址

          指針類型是指變量存儲的是一個內(nèi)存地址的變量類型,在golang中可以通過&運(yùn)算符獲取變量的指針

          取變量指針的語法

          ptr := &v    // v的類型為T
          // v:代表被取地址的變量,類型為T
          // ptr:用于接收地址的變量,ptr的類型就為*T,稱做T的指針類型。*代表指針

          2、聲明

          指針聲明需要指定存儲地址中對應(yīng)數(shù)據(jù)的類型,并使用*作為類型前綴進(jìn)行指針取值

          func main() {
              //指針取值
              a := 10
              b := &a // 取變量a的地址,將指針保存到b中
              fmt.Printf("type of b:%T\n", b)
              c := *b // 指針取值(根據(jù)指針去內(nèi)存取值)
              fmt.Printf("type of c:%T\n", c)
              fmt.Printf("value of c:%v\n", c)
          }
          /*
          type of b:*int
          type of c:int
          value of c:10
          /*

          用法歸納

          • 對變量進(jìn)行取地址(&)操作,可以獲得這個變量的指針變量
          • 對指針變量進(jìn)行取值(*)操作,可以獲得指針變量指向的原變量的值
          • 指針變量的值是變量的內(nèi)存地址

          3、空指針

          指針變量聲明后會被初始化為nil,表示的是空指針

          func main() {
              var p *string
              fmt.Println(p)
              fmt.Printf("p的值是%v\n", p)
              if p != nil {
                  fmt.Println("非空")
              } else {
                  fmt.Println("空值")
              }
          }

          還可以使用new函數(shù)進(jìn)行初始化,new函數(shù)會根據(jù)數(shù)據(jù)類型申請內(nèi)存空間并使用零值填充,并返回申請的空間地址

          var a *int = new(int)
          fmt.Println(&a)
          fmt.Println(a) // 0xc000014330
          fmt.Println(*a) // 0
          // 變量的地址 指針的地址 指針的值

          4、用指針修改值

          exchange函數(shù)依次進(jìn)行的操作:

          • c指針的值, 賦給臨時變量t

          • d指針的值, 賦給c指針指向的變量

          • c指針的值賦給d指針指向的變量

          func exchange(c, d *int) {
           t := *c
           *c = *d
           *d = t
          }
          func main() {
           a, b := 68      // 準(zhǔn)備兩個變量, 賦值6和8
           exchange(&a, &b)  // 交換變量值
           fmt.Println(a, b) // 輸出變量值
          }
          /*
          8 6
          */

          5、指針的指針

          用來存儲指針變量地址的變量叫做指針的指針

          func main() {
             var a int
             var ptr *int
             var pptr **int
             a = 3000
             /* 指針 ptr 地址 */
             ptr = &a
             /* 指向指針 ptr 地址 */
             pptr = &ptr
             /* 獲取 pptr 的值 */
             fmt.Printf("變量 a = %d\n", a )
             fmt.Printf("指針變量 *ptr = %d\n", *ptr )
             fmt.Printf("指向指針的指針變量 **pptr = %d\n", **pptr)
          }
          /*
          變量 a = 3000
          指針變量 *ptr = 3000
          指向指針的指針變量 **pptr = 3000
          /*

          多維指針

          func main() {
            var a ****int
              v := 10
              p1 := &v  // *int
              p2 := &p1 // **int
              p3 := &p2 // ***int
              a = &p3   //  ****int
              fmt.Println(v, p1, p2, p3, a, ****a) // 10 0xc000114168 0xc00011e028 0xc00011e030 0xc00011e038 10
          }

          See you ~

          瀏覽 43
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕AV电影 | av婷婷综合在线网 | 91射在线观看 | 人妻懂色av粉嫩av浪潮av | 日韩欧美卡一卡二 |