• 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
    
    ""
    
  • 相关阅读:
    P4343 [SHOI2015]自动刷题机
    P1083 [NOIP2012 提高组] 借教室
    [AGC记录] AGC003题解
    [做题记录-乱做] [AGC003E] Sequential operations on Sequence
    [AGC记录] AGC002题解
    [AGC记录] AGC001题解
    [做题记录-乱做] [AGC001F] Wide Swap
    [做题记录-计数] [ARC087D] Squirrel Migration
    [做题记录-计数] [九省联考2018]秘密袭击coat
    [做题记录-计数][AGC024E] Sequence Growing Hard
  • 原文地址:https://www.cnblogs.com/heris/p/15995425.html
Copyright © 2020-2023  润新知