代码改变世界

34_结构体指针类型的使用

2019-09-21 22:53  StevenZhao  阅读(609)  评论(0编辑  收藏  举报
package main

import "fmt"

//定义一个结构体,存储学生信息
//要想被不同的包调用结构体,则结构体的名字首字母要大些,里面的变量名也要大写
type Student struct {
	//和变量定义不同,不要写var关键字
	Id   int
	Name string
	Sex  byte
	Age  int
	Addr string
}
type Person struct {
	//继承student结构体
	*Student //所谓匿名字段,就是只写结构体(变量)名字,而不写其类型

	Hobby   string
	Country string
}

func main() {

	p1 := Person{&Student{1, "zhao", 'm', 24, "js"}, "basketball", "china"}
	fmt.Println("p1=", p1) //p1= {10a957e00x basketball china}
	//同过.运算来操作指针继承对象
	fmt.Printf("p1.Id=%d,p1.Name=%s\n", p1.Id, p1.Name) //p1.Id=1,p1.Name=zhao

	//声明一个指针类型的结构体类型
	var p2 Person
	p2.Student = new(Student) //给指针开辟一个空间

    //p2.Name和(*p).Name是等价的
	p2.Name = "steven"
	p2.Age = 22
	p2.Sex = 'w'
	p2.Hobby = "pingpang"
	fmt.Println(p2.Name, p2.Age, p2.Sex, p2.Hobby) //steven 22 119 pingpang

}