GoLang 基础语法(八)

GoLang 基础语法(八)

1.指针初识

func main() {
	a := 10
	fmt.Println(a)
	fmt.Printf("%T\n", a)
	fmt.Printf("%p\n", &a)
	var p1 *int
	fmt.Println(p1)
	p1 = &a
	fmt.Println(p1)
	fmt.Println("p1指针自己的地址是:", &p1)
	fmt.Println("p1指针对应存储的数值是:", *p1)
	a = 100
	fmt.Println(a)
	fmt.Printf("%p\n", &a)
	*p1 = 200
	fmt.Println(a)
	var p2 **int
	fmt.Println(p2)
	p2 = &p1
	fmt.Println(p2)
	fmt.Println("p2指针自己的地址是:", &p2)
	fmt.Println("p2对应的值", **p2)
}

2.数组指针和指针数组

  • 数组指针:是指存储数组的地址的指针
  • 指针数组:是指用数组去存储指针
func main() {
	arr1 := [4]int{1, 2, 3, 4}
	fmt.Println(arr1)
	var p1 *[4]int
	fmt.Println(p1)
	p1 = &arr1
	fmt.Printf("%p\n", p1)
	fmt.Println(&p1)
	(*p1)[0] = 100
	fmt.Println(*p1)
	p1[1] = 200 //简化写法
	fmt.Println(arr1)
	fmt.Println("--------------------------")
	a := 1
	b := 2
	c := 3
	d := 4
	arr2 := [4]int{a, b, c, d}
	arr3 := [4]*int{&a, &b, &c, &d}
	fmt.Println(arr2)
	fmt.Println(arr3)
	arr2[0] = 100
	fmt.Println(arr2)
	fmt.Println(a)
	*arr3[0] = 200
	fmt.Println(arr3)
	fmt.Println(a)
	b = 999
	fmt.Println(arr2[1])
	fmt.Println(*arr3[1])
}

3.函数指针和指针函数

func main() {
	//函数指针
	var fun func()
	fun = MyTest01
	fun()
	//指针函数
	arr1 := MyTest02()
	fmt.Printf("%p\n", &arr1)
	arr2 := MyTest03()
	fmt.Printf("%p\n", arr2)
}
func MyTest02() [4]int {
	arr := [4]int{1, 2, 3, 4}
	fmt.Printf("%p\n", &arr)
	return arr
}
func MyTest03() *[4]int {
	p := &[4]int{5, 6, 7, 8}
	fmt.Printf("%p\n", p)
	return p
}
func MyTest01() {
	fmt.Println("这是测试函数")
}

4.函数指针作为参数

func main() {
	a := 1
	Func1(a)
	fmt.Println(a)
	Func2(&a)
	fmt.Println(a)
	fmt.Println("---------------------")
	arr := [4]int{1, 2, 3, 4}
	Func3(arr)
	fmt.Println(arr)
	Func4(&arr)
	fmt.Println(arr)
}

func Func3(arr [4]int) {
	arr[0] = 999
}
func Func4(arr *[4]int) {
	arr[0] = 666
}

func Func1(num int) {
	num = 999
}

func Func2(num *int) {
	*num = 666
}

5.结构体初识

func main() {
	//方式一:
	var person1 Person
	person1.age = 18
	person1.name = "zzs"
	person1.sex = true
	person1.address = "北京"
	fmt.Println(person1)
	//方式二:
	person2 := Person{}
	person2.age = 19
	person2.name = "ywj"
	person2.sex = false
	person2.address = "天津"
	fmt.Println(person2)
	//方式三:
	person3 := Person{
		name:    "wy",
		age:     20,
		sex:     true,
		address: "辽宁",
	}
	fmt.Println(person3)
	//方式四:
	person4 := Person{"pnb", 21, true, "上海"}
	fmt.Println(person4)
}

type Person struct {
	name    string
	age     int
	sex     bool
	address string
}

6.结构体指针

func main() {
	person1 := MyPerson{"zzs", 18, true}
	fmt.Println(person1)
	person2 := person1
	person2.age = 19
	person2.name = "ywj"
	person2.sex = false
	fmt.Println(person1)
	fmt.Println(person2)

	var person3 *MyPerson = &MyPerson{
		name: "zzs",
		age:  18,
		sex:  true,
	}
	fmt.Println(person3)
	person4 := person3
	person4.name = "ywj"
	person4.sex = false
	person4.age = 19
	fmt.Println(person3)
	fmt.Println(person4)

	person5 := new(MyPerson)
	person5.name = "zzs"
	person5.sex = true
	person5.age = 18
	fmt.Println(person5)
}

type MyPerson struct {
	name string
	age  int
	sex  bool
}

7.结构体的匿名字段

func main() {
	s1 := struct {
		name string
		age  int
	}{name: "zzs", age: 18}
	fmt.Println(s1)

	w1 := Worker{
		"zzs", 10,
	}
	fmt.Println(w1)
	fmt.Println(w1.string)
	fmt.Println(w1.int)
}

type Worker struct {
	string
	int
}

8.结构体的嵌套

func main() {
	var s1 Student
	s1.name = "zzs"
	s1.age = 18
	var book Book
	book.name = "C#"
	book.price = 210
	s1.book = book
	fmt.Println(s1)
	fmt.Println(s1.name)
	fmt.Println(s1.age)
	fmt.Println(s1.book)
	fmt.Println(s1.book.name)
	fmt.Println(s1.book.price)
	var s2 = s1
	s2.book.name = "JAVA"
	fmt.Println(s2)
	fmt.Println(s1)

	fmt.Println("---------------------------------")
	var st1 = Student1{name: "zzs", age: 18, book: &Book{name: "PHP", price: 879}}
	fmt.Println(*st1.book)
	var st2 = st1
	st2.book.name = "Python"
	fmt.Println(*st1.book)
}

type Student struct {
	name string
	age  int
	book Book
}
type Student1 struct {
	name string
	age  int
	book *Book
}
type Book struct {
	name  string
	price int
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值