第03天(复合类型)_结构体的基本使用

29_结构体普通变量初始化

package main //必须有个main包

import "fmt"

//定义一个结构体类型
type Student struct {
    id   int
    name string
    sex  byte //字符类型
    age  int
    addr string
}

func main() {
    //顺序初始化,每个成员必须初始化
    var s1 Student = Student{1, "mike", 'm', 18, "bj"}
    fmt.Println("s1 = ", s1)

    //指定成员初始化,没有初始化的成员,自动赋值为0
    s2 := Student{name: "mike", addr: "bj"}
    fmt.Println("s2 = ", s2)
}

30_结构体指针变量初始化.go

package main //必须有个main包

import "fmt"

//定义一个结构体类型
type Student struct {
    id   int
    name string
    sex  byte //字符类型
    age  int
    addr string
}

func main() {
    //顺序初始化,每个成员必须初始化, 别忘了&
    var p1 *Student = &Student{1, "mike", 'm', 18, "bj"}
    fmt.Println("p1 = ", p1)

    //指定成员初始化,没有初始化的成员,自动赋值为0
    p2 := &Student{name: "mike", addr: "bj"}
    fmt.Printf("p2 type is %T\n", p2)
    fmt.Println("p2 = ", p2)
}

31_结构体成员的使用:普通变量.go

package main //必须有个main包

import "fmt"

//定义一个结构体类型
type Student struct {
    id   int
    name string
    sex  byte //字符类型
    age  int
    addr string
}

func main() {
    //定义一个结构体普通变量
    var s Student

    //操作成员,需要使用点(.)运算符
    s.id = 1
    s.name = "mike"
    s.sex = 'm' //字符
    s.age = 18
    s.addr = "bj"
    fmt.Println("s = ", s)
}

32_结构体成员的使用:指针变量.go

package main //必须有个main包

import "fmt"

//定义一个结构体类型
type Student struct {
    id   int
    name string
    sex  byte //字符类型
    age  int
    addr string
}

func main() {
    //1、指针有合法指向后,才操作成员
    //先定义一个普通结构体变量
    var s Student
    //在定义一个指针变量,保存s的地址
    var p1 *Student
    p1 = &s

    //通过指针操作成员  p1.id 和(*p1).id完全等价,只能使用.运算符
    p1.id = 1
    (*p1).name = "mike"
    p1.sex = 'm'
    p1.age = 18
    p1.addr = "bj"
    fmt.Println("p1 = ", p1)

    //2、通过new申请一个结构体
    p2 := new(Student)
    p2.id = 1
    p2.name = "mike"
    p2.sex = 'm'
    p2.age = 18
    p2.addr = "bj"
    fmt.Println("p2 = ", p2)
}

33_结构体比较和赋值.go

package main //必须有个main包

import "fmt"

//定义一个结构体类型
type Student struct {
    id   int
    name string
    sex  byte //字符类型
    age  int
    addr string
}

func main() {
    s1 := Student{1, "mike", 'm', 18, "bj"}
    s2 := Student{1, "mike", 'm', 18, "bj"}
    s3 := Student{2, "mike", 'm', 18, "bj"}
    fmt.Println("s1 == s2 ", s1 == s2)
    fmt.Println("s1 == s3 ", s1 == s3)

    //同类型的2个结构体变量可以相互赋值
    var tmp Student
    tmp = s3
    fmt.Println("tmp = ", tmp)
}

34_结构体作为函数参数.go

package main //必须有个main包

import "fmt"

//定义一个结构体类型
type Student struct {
    id   int
    name string
    sex  byte //字符类型
    age  int
    addr string
}

func test02(p *Student) {
    p.id = 666
}

func main() {
    s := Student{1, "mike", 'm', 18, "bj"}

    test02(&s) //地址传递(引用传递),形参可以改实参
    fmt.Println("main: ", s)

}

func test01(s Student) {
    s.id = 666
    fmt.Println("test01: ", s)
}

func main01() {
    s := Student{1, "mike", 'm', 18, "bj"}

    test01(s) //值传递,形参无法改实参
    fmt.Println("main: ", s)

}

你可能感兴趣的:(第03天(复合类型)_结构体的基本使用)