1.结构体是将零个或多个任意类型的命名变量组合在一起的聚合数据类型,每个变量都叫做结构体成员
2.结构体何以作为函数参数传递,其是复制一个结构体将它传给一个函数,是值传递
代码如下:
packagemain
import"fmt"
//定义一个结构体,存储学生信息
//要想被不同的包调用结构体,则结构体的名字首字母要大些,里面的变量名也要大写
typeStudentstruct{
//和变量定义不同,不要写var关键字
Idint
Namestring
Sexbyte
Ageint
Addrstring
}
//值传递
funcPrintName(sStudent){
s.Name="test"
fmt.Println(s.Name)//test
}
//引用传递
funcPrintId(s*Student){
s.Id=666
fmt.Println(s.Id)
}
funcmain(){
//1.结构体中可以通过(.)操作符来对成员变量进行赋值
vars1Student
s1.Name="steven"
fmt.Println(s1.Name)
//2.顺序初始化,必须每个成员都要初始化
s2:=Student{1,"alice",'m',23,"sy"}
fmt.Println(s2)
//3.部分初始化
s3:=Student{Id:2,Name:"zhangsan"}//没有初始化的默认为0
fmt.Println(s3)
//4.指针变量的定义
vars4*Student=&Student{3,"lisi",'w',22,"js"}
s5:=&Student{Id:4,Name:"wangwu"}
//s4.成员和*s4.成员是等价的,(.)操作符比*操作符级别高,所以(*)要加括号
fmt.Printf("*s4.Addr=%d",(*s4).Id)
//两者效果是一样的
fmt.Println(s4,s5)//&{3lisi11922js}&{4wangwu00}
fmt.Println(*s4,*s5)//{3lisi11922js}{4wangwu00}
//5.先分配空间在赋值,这种定义的是指针类型
s6:=new(Student)
s6.Id=6
s6.Name="xiaoqi"
fmt.Println(*s6)//{6xiaoqi00}
//7.结构体变量只能进行==和!=比较
fmt.Println(s1==s2)//false
//8.结构体做函数参数,是值传递
PrintName(s3)
fmt.Println(s3.Name)//zhangsan
//9.引用传递
PrintId(&s2)
fmt.Println(s2.Id)
//相同结构体之间可以赋值
vars7Student=s2
fmt.Println("S7=",s7)
}
packagemain
import"fmt"
//定义一个结构体,存储学生信息
//要想被不同的包调用结构体,则结构体的名字首字母要大些,里面的变量名也要大写
typeStudentstruct{
//和变量定义不同,不要写var关键字
Idint
Namestring
Sexbyte
Ageint
Addrstring
}
//值传递
funcPrintName(sStudent){
s.Name="test"
fmt.Println(s.Name)//test
}
//引用传递
funcPrintId(s*Student){
s.Id=666
fmt.Println(s.Id)
}
funcmain(){
//1.结构体中可以通过(.)操作符来对成员变量进行赋值
vars1Student
s1.Name="steven"
fmt.Println(s1.Name)
//2.顺序初始化,必须每个成员都要初始化
s2:=Student{1,"alice",'m',23,"sy"}
fmt.Println(s2)
//3.部分初始化
s3:=Student{Id:2,Name:"zhangsan"}//没有初始化的默认为0
fmt.Println(s3)
//4.指针变量的定义
vars4*Student=&Student{3,"lisi",'w',22,"js"}
s5:=&Student{Id:4,Name:"wangwu"}
//s4.成员和*s4.成员是等价的,(.)操作符比*操作符级别高,所以(*)要加括号
fmt.Printf("*s4.Addr=%d",(*s4).Id)
//两者效果是一样的
fmt.Println(s4,s5)//&{3lisi11922js}&{4wangwu00}
fmt.Println(*s4,*s5)//{3lisi11922js}{4wangwu00}
//5.先分配空间在赋值,这种定义的是指针类型
s6:=new(Student)
s6.Id=6
s6.Name="xiaoqi"
fmt.Println(*s6)//{6xiaoqi00}
//7.结构体变量只能进行==和!=比较
fmt.Println(s1==s2)//false
//8.结构体做函数参数,是值传递
PrintName(s3)
fmt.Println(s3.Name)//zhangsan
//9.引用传递
PrintId(&s2)
fmt.Println(s2.Id)
//相同结构体之间可以赋值
vars7Student=s2
fmt.Println("S7=",s7)
}