package main
import "fmt"
//结构体定义在函数外部
//定义函数类型
//type functye func(int,int)int
//type 结构体名 struct {
// 结构体成员列表
// 成员名 数据类型
// 姓名 string
// age int
//}
//结构体是全局的可以在项目所有文件使用
//结构体是一种数据类型
type student struct {
id int
name string
age int
sex string
score int
addr string
}
func main0901() {
//定义结构体变量 复合类型
//var 变量名 结构体名
//var stu student
//
////为结构体成员赋值 包名.函数名 结构体.成员 对象.方法
//stu.name = "张大帅"
//stu.score = 99
//stu.addr = "奉天皇姑"
//stu.sex = "男"
//stu.age = 58
//stu.id = 1
//定义结构体是为成员赋值
//var stu student = student{1, "张宗昌", 49, "男", 5, "山东济南"}
//自动推导类型和指定成员赋值
stu := student{name: "孙殿英", score: 60, sex: "男", addr: "北平", id: 1, age: 42}
fmt.Println(stu)
}
func main0902() {
stu := student{101, "朱德", 60, "男", 101, "四川"}
fmt.Printf("%p\n", &stu)
fmt.Printf("%p\n", &stu.id)
//结构体成员为string 需要和结构体最大的数据类型进行对齐
fmt.Printf("%p\n", &stu.name)
fmt.Printf("%p\n", &stu.age)
fmt.Printf("%p\n", &stu.sex)
fmt.Printf("%p\n", &stu.score)
fmt.Printf("%p\n", &stu.addr)
}
func main() {
stu := student{102, "聂荣臻", 60, "男", 101, "湖南"}
//将结构体变量赋值
stu1 := stu
stu1.id = 103
//
//fmt.Println(stu1)
//fmt.Println(stu)
//两个结构体比较 是比较所有成员 如果成员相同 结果为真 支持== !=比较操作
if stu1 == stu {
fmt.Println("相同")
} else {
fmt.Println("不相同")
}
}
package main
import "fmt"
type Student struct {
id int
name string
age int
sex string
score int
addr string
}
//结构体数组作为函数参数
func Sort(arr []Student) {
for i := 0; i < len(arr)-1; i++ {
for j := 0; j < len(arr)-1-i; j++ {
//比较结构体成员信息
if arr[j].age > arr[j+1].age {
//交换数组元素
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
//fmt.Println(arr)
}
func main() {
//结构体数组 | 切片
var arr []Student = []Student{
Student{101, "唐三藏", 32, "男", 100, "东土大唐"},
Student{102, "孙悟空", 532, "男", 100, "花果山"},
Student{103, "猪悟能", 600, "男", 100, "高老庄"},
Student{104, "沙悟净", 180, "男", 100, "流沙河"},
Student{105, "白龙马", 10, "男", 100, "西海"}}
//fmt.Println(arr)
//打印结构体信息
//for i := 0; i < len(arr); i++ {
// fmt.Println(arr[i])
//}
//修改指定结构体成员的信息
//arr[1].score = 60
//arr[2].score = 10
//fmt.Println(arr)
//结构体切片添加数据
arr = append(arr, Student{106, "如来大魔王", 9999, "男", 100, "西天"})
//结构体数组作为函数参数是值传递
//结构体切片作为函数参数是地址传递(引用传递)
Sort(arr)
fmt.Println(arr)
}