go語言學習筆記17------數據結構③

1.結構體

type student struct {
   name string
   id int
   sex  byte
}

type 結構體名字 struct

1.1順序初始化

var s1 student=student{"abc",123,'b'}

注意:順序初始化,每個成員必須初始化,在初始化時,值的順序與結構體成員的順序保持一致。

1.2結構體比較與賦值

兩個結構體可以使用 == 或 != 運算符進行比較,但不支持 > 或 <,同類型的兩個結構體變量可以相互賦值。

1.3結構體數組

s1:=[]student{student{"abc",123,'b'},student{"qwe",234,'m'}}

1.4結構體作爲函數參數

結構體也可以作爲函數參數,進行傳遞,是值傳遞,如下所示:

package main

import "fmt"

type student struct {
   name string
   id int
   sex  byte
}

func test(stu student)  {
   stu.id=123
   fmt.Println("stu",stu)
}
func main() {
   s1:=student{"abc",1,'b'}
   test(s1)
   fmt.Println("s1",s1)
}
輸出結果
stu {abc 123 98}
s1 {abc 1 98}

2.指針

2.1指針變量

package main

import "fmt"

func main() {
   var i int= 100
   var p *int
   p=&i
   fmt.Printf("i=%d,p=%v",i,p)
fmt.Printf("i=%d,p=%v",i,*p)
}
輸出結果
i=100,p=0xc042052080
i=100,p=100

所以,*p的作用就是根據存儲的變量的地址,來操作變量的存儲單元(包括輸出變量存儲單元中的值,和對值進行修改)

2.2new( )函數

指針變量,除了以上介紹的指向以外(p=&a),還可以通過new( )函數來指向。
具體的應用方式如下:

ackage main

import "fmt"

func main() {

   var p *int
    p=new(int)
    *p=222
    fmt.Println(*p)
}
輸出結果
222

2.3指針做函數參數

指針作爲參數進行傳遞時,爲引用傳遞,也就是傳遞的地址。

package main

import "fmt"

func swap(num1,num2 *int)  {
    *num1,*num2=*num2,*num1

}
func main() {
    num1:=10
    num2:=20
    swap(&num1,&num2)
    fmt.Println(num1,num2)
}
輸出結果
20 10

2.4數組指針

前面在講解數組的時候,我們用數組作爲函數參數,但是數組作爲參數進行傳遞是值傳遞,如果想引用傳遞,可以使用數組指針。具體使用方式如下:

package main

import "fmt"

func swap(p *[5]int)  {
   (*p)[0]=1
}
func main() {

   a:=[5]int{111,222,333,444,555}
   swap(&a)
   fmt.Println(a)
}
輸出結果
[1 222 333 444 555]

2.5指針數組

package main

import "fmt"

func main() {

var p [2]*int
var i int=22
var j int=33
p[0]=&i
p[1]=&j
fmt.Println(*p[0])
fmt.Println(*p[1])
}
輸出結果
22
33

2.6結構體指針變量

用結構體作爲函數的參數,默認的是值傳遞,那麼通過結構體指針,可以實現結構體的引用傳遞。具體實現的方式如下:

package main

import "fmt"

type student struct {
   name string
   id int
   sex  byte
}

func test(stu *student)  {
   stu.id=123
   fmt.Println("stu",stu)
}
func main() {
   s1:=student{"abc",1,'b'}
   test(&s1)
   fmt.Println("s1",s1)
}
輸出結果
stu &{abc 123 98}
s1 {abc 123 98}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章