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}