开发者

golang结构体指针的实现

开发者 https://www.devze.com 2025-06-24 10:50 出处:网络 作者: longzhoufeng
目录1、由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用结构体指针完成,结合newhttp://www.devze.com(phpT)函数创建结构体指针
目录

    1、由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用结构体指针完成,结合newhttp://www.devze.com(phpT)函数创建结构体指针

    peo := new(P编程客栈eople)
    //因为结构体本质是值类型,所以创建结构体指针时已经开辟了内存空间
    fmt.Println(peo == nil) //输出:false
    //由于结构体中属性并不是指针类型,所以python可以直接调用
    peo.Name = "jeff"
    fmt.Println(peo)//输出:&{jeff 0}
    peo1:=peo
    peo1.Name="高级语言"
    fmt.Println(peo1,peo)//输出:&{高级语言 0} &{高级语言 0}
    

    2、如果不想使用new(T)函数,可以直接声明结构体指针并赋值

    //声明结构体指针
    var peo *People
    //给结构体指针赋值
    peo = &People{"jeff", 18}
    /*
    上面代码使用短变量方式如下
    www.devze.compeo:= &People{"jeff", 18}
     */
    fmt.Println(peo)
    

    3、结构体指针比较的是地址,*结构体指针取出地址中对应的值

    p1 := People{"jeff", 18}
    p2 := People{"jeff", 18}
    fmt.Printf("%p %p\n", &p1, &p2) //输出地址不同
    fmt.Println(p1 == p2)           //输出:true
    
    p3 := new(People)
    p3 = &People{"jeff", 17}
    //结构体变量不能和指针比较,使用*指针取出地址中值
    fmt.Println(p1 == *p3) //输出:true
    
    p4 := &People{"jeff", 17}
    //指针比较的是地址
    fmt.Println(p3 == p4) //输出:false

    到此这篇关于golang结构体指针的实现的文章就介绍到这了,更多相关golang结构体指针内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)! 

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号