Skip to content

黄一笑|旅客驿站

生活不止,学习不止。

  • Home
  • 学习笔记
  • CPA学习笔记
  • Landing Page
  • Toggle search form

Go的指针学习笔记

Posted on October 14, 2022October 16, 2022 By admin No Comments on Go的指针学习笔记

对于指针,我其实挺难理解的。为什么非要用指针来进行操作呢?下面是我的学习笔记和心得。

取址符 & 可以取得当前变量的地址
取值符 * 访问地址指向的值
数据类型 *指向的类型

package main

import (
	"fmt"
	"math"
)

type Vertex struct {
	X, Y float64
}

func (v Vertex) Abs() float64 {
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}

func (v *Vertex) Scale(f float64) {
	v.X = v.X * f
	v.Y = v.Y * f
}

func main() {
	v := Vertex{3, 4}
	v.Scale(11)
	fmt.Println(v.Abs())
}

这是一段范本,对于0基础的我,实在有一些看不懂。我只是觉得我理解了。

func (v *Vertex) Scale(f float64) {
	v.X = v.X * f
	v.Y = v.Y * f
}

如果把这一段的星号去掉了,结果始终是5,而不去掉,结果是55.我一直在想为什么呢?直到我发现这个函数没有return,也就是说,指针函数,直接对地址的值进行了操作,把v.x 和 v.y的地址上的值改为3 x 11, 和 4 x 44。为了验证我的想法,我修改了下代码。

func main() {
	v := Vertex{3, 4}
	fmt.Println(*&v)
	v.Scale(11)
	fmt.Println(v)
	fmt.Println(v.Abs())
}

运行代码之后可以看到v的值,已经修改为 33 和 44了。也就是说,通过直接操作内存,函数不return结果,也可以操作。而去掉星号之后,就变成,虽然操作了值,但是没有return。相比较而言,的确简单了很多。下面是我自己做的另外一个例子,正常的函数 addone,再调用之后,value的数值并不会改变,但是plusone,使用指针的方法,就发现了改变。

package main

import (
	"fmt"
	"gocoding/gocoding/note"
)

func addone(v int) {
	v++
	fmt.Printf("正常调用的值是 %v\n", v)
}
func plusone(v *int) {
	*v++
	fmt.Printf("正常调用的值是 %v\n", *v)
}

func main() {
	var value = 2022
	addone(value)
	fmt.Printf("重新查看value的值:%v\n", value)
	//如果想彻底的让调用函数之后,重新赋值,最好就是用指针的方式。
	var ptr = &value
	plusone(ptr)
	fmt.Printf("重新查看ptr的值:%v\n", *ptr)

}
学习笔记, 编程学习 Tags:Go, 指针

Post navigation

Previous Post: ERPNext 14 Naming Series
Next Post: How to cancel Quickbooks

Related Posts

ERPNext 14 Naming Series ERPNext
Rust的常量 学习笔记
How to cancel Quickbooks 学习笔记
isnull 提高效率 SQL笔记
Rust流程管理 学习笔记
Rust函数返回值 学习笔记

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Archives

  • February 2023
  • October 2022
  • September 2022

Categories

  • CPA学习笔记
  • ERPNext
  • FAR
  • SQL笔记
  • 学习笔记
  • 编程学习

Recent Posts

  • How to cancel Quickbooks
  • Go的指针学习笔记
  • ERPNext 14 Naming Series
  • Treasury Stock
  • Accumulated other comprehensive income (AOCI)

Recent Comments

No comments to show.

AOCI Benefit plan Equity FAR Go ISNULL Quickbook Rust SQL Treasury Stock 常量 循环 所有权 指针 注释


  • CPA学习笔记
  • ERPNext
  • FAR
  • SQL笔记
  • 学习笔记
  • 编程学习

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Copyright © 2023 黄一笑|旅客驿站.

Powered by PressBook Masonry Blogs