go指针

package main


import "fmt"
func main() {
	var a int = 10
	var p *int = &a
	fmt.Println( "000>>a = ",a)
	fmt.Printf( "000>>p=%v p=%v,&p=%p\n ",p,*p,p)
	a = 100
	fmt.Println( "001>>a = ",a)
	*p = 250
	fmt.Println( "002>>a= ",a)
	fmt.Println("003>>*p = ", a)
}

说明:

指针:
    指针就是地址。指针变量就是存储地址的变量。
    *p:解引用、间接引用。
    
    栈帧:
        用来给函数运行提供内存空间。取内存于stack 上。
        当函数调用时,产生栈帧。函数调用结束,释放栈顿。
        栈帧存储: 1.局部变量。2.形参。(形参与局部变量存储地位等同) 3.内存字段描述值
    
    指针使用注意:
        空指针:未被初始化的指针。 var p *int      *p--> err
        野指针:被—片无效的地址空间初始化。

    格式化输出:;
        %q: 以Go语言格式显示字符串。默认带有""符
        %v:显示对应数据详细信息

    变量存储:
        等号左边的变量,代表变量所指向的内存空间。   (写)
        等号右边的变星,代表变量内存空间存储的数据值。(读)
    
    指针的函数传参。

代码:

package main
import "fmt"

func main() {
	var a int = 10
	fmt.Println("&a", &a)
	var p *bool
	//在 heap 上申请一片内存地址空间
	p = new(bool)	//默认类型的默认值
	fmt.Println(*p)

	var p1 *int 	//在 heap 上申请一片内存地址空间
	p1 = new(int)	//默认类型的默认值
	fmt.Println(*p1)

	var p2 *string 	//在 heap 上申请一片内存地址空间
	p2 = new(string)	//默认类型的默认值
	fmt.Printf("%s\n",*p2)
	fmt.Printf("%q\n",*p2)
}

输出:

&a 0xc0000120b0
false
0

""
posted @ 2022-03-11 21:21  ty1539  阅读(53)  评论(0编辑  收藏  举报