结构体初始化
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
//值传递 形参无法改变实参
func test0(s Student) {
s.addr = "shanghai"
}
//操作指针指向的内存
func test1(s *Student) {
s.addr = "shanghai"
}
func main() {
var s Student = Student{1, "jack", 'm', 18, "beijing"}
test0(s)
fmt.Println("值传递: s = ", s)
test1(&s)
fmt.Println("地址传递: s = ", s)
}
结构体指针变量初始化
/*
要点:注意取地址符号 "&"
*/
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
func main() {
//指针
var s *Student = &Student{1, "jack", 'm', 18, "beijing"}
fmt.Println("*s = ", *s)
//部分初始化
s1 := &Student{name: "koko"}
fmt.Printf("s1 = %T\n", s1)
fmt.Println("s1 = ", *s1)
fmt.Println("s1 = ", s1)
}
普通变量
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
func main() {
var s Student
//注意使用"."符号
s.name = "jack"
s.id = 1
s.addr = "shanghai"
fmt.Println("s = ", s)
}
指针变量
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
func main() {
//方式1
var s Student
var s1 *Student = &s //取地址
s1.addr = "shanghai"
(*s1).id = 2
fmt.Println("s1 = ", *s1)
fmt.Println("s = ", s)
//方式2
s2 := new(Student) //通过new
s2.addr = "beijing"
(*s2).id = 2
fmt.Println("s2 = ", *s2)
}
比较与赋值
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
func main() {
//结构体比较(同数组比较)
var s Student = Student{1, "jack", 'm', 18, "beijing"}
var s1 Student = Student{1, "jack", 'm', 19, "beijing"}
fmt.Println("s = s1", s == s1)
//同类型的两个结构体变量可以相互赋值(同数组赋值)
var t Student
t = s1
fmt.Println("t = ", t)
}
值传递与地址传递
package main
import "fmt"
type Student struct {
id int
name string
sex byte
age int
addr string
}
//值传递 形参无法改变实参
func test0(s Student) {
s.addr = "shanghai"
}
//操作指针指向的内存
func test1(s *Student) {
s.addr = "shanghai"
}
func main() {
var s Student = Student{1, "jack", 'm', 18, "beijing"}
test0(s)
fmt.Println("值传递: s = ", s)
test1(&s)
fmt.Println("地址传递: s = ", s)
}