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}

猜你喜欢

转载自blog.csdn.net/weixin_42927934/article/details/82262944