结构体也可以作为函数参数,进行传递,如下所示:
结构体作为函数参数进行传递,是值传递。
练习:3个学生,计算其平均分
思路:(1):定义一个结构体如下:
(2):定义一个结构体数组,并且添加学生信息
(3):计算平均值
练习:3个学生,每个学生3门课程,求其平均值
思路和上题是一样的,不同之处在于结构体中,定义了一个数组类型的成员,存储三门成绩
体会结构体的优势,掌握基本的用法。
传值
func printValue(stu Student) {
stu.id = 250
//printValue stu = {250 Luffy 109 18 s EastSea}
fmt.Println(“printValue stu = “, stu)
}
func main() {
var s Student = Student{1, “Luffy”, ‘m’, 18, “EastSea”}
printValue(s) //值传递,形参修改不会影响到实参值
fmt.Println(“main s = “, s) //main s = {1 Luffy 109 18 EastSea}
}
传参过程中,实参会将自己的值拷贝一份给形参。因此结构体“传值”操作几乎不会在实际开发中被使用到。近乎100%的使用都采用“传址”的方式,将结构体的引用传递给所需函数。
传引用
func printPointer(p *Student) {
p.id = 250
//printPointer p = &{250 Luffy 109 18 EastSea}
fmt.Println(“printPointer p = “, p)
}
func main() {
var s Student = Student{1, “Luffy”, ‘m’, 18, “EastSea”}
printPointer(&s) //传引用(地址),形参修改会影响到实参值
fmt.Println(“main s = “, s) //main s = {250 Luffy 109 18 EastSea}
}