夜墨11111

夜墨11111

0个粉丝

7

问答

11

专栏

39

资料

夜墨11111  发布于  2020-10-14 10:22:43
采纳率 0%
7个问答
2094

Go语言中结构体初始化后,拿到结构体类型的普通对象(非指针类型)

 

调用其地址传递的方法后,居然仍然能实现增加和删除?不理解
Go语言结构体到底是什么传递
本周,拿go练习了数据结构中的单链队列,实现很简单,代码附在最后。
然而在测试到时候惊奇的发现,在InitQ函数中,我明明返回的是LinkQ类型,并没有在这个返回值设置对应的指针类型,而在main函数测试中,我反而拿这个LinkQ类型变量去调用了AddQ方法,而且居然还生效了,注意我AddQ的调用者设置的是指针类型(**LinkQ),

因为我们知道,Go语言中结构体是值传递,所以要想做改变其中成员操作的方法和函数参数,必然要做地址传递。

package main

import "fmt"
//实现单链队列,队尾入队,队头出队

//定义队列每个节点属性
type Qnode struct {
    data interface{}
    next *Qnode
}
//定义队列属性
type LinkQ struct{
    head *Qnode //头指针
    length int
}
func InitQ()_** LinkQ**_{
    return LinkQ{
        &Qnode{
            0,
            nil,
        },
        0,
    }
}
func InitQnode(i interface{})*Qnode{
    return &Qnode{
        i,
        nil,
    }
}
func (q *LinkQ)AddQ(node *Qnode)bool{
    p:=q.head
    for i:=0;i<q.length;i++{
            p=p.next
    }
    node.next=p.next
    p.next=node
    q.length++
    return true
}
func (q *LinkQ)DelQ()bool{
    if q.length==0 {
        fmt.Println("队是空队列,无法删除")
        return false
    }
    p:=q.head.next
    q.head.next=p.next
    p.next=nil
    q.length--
    return true
}
func(q LinkQ)Show()string{
    if q.length==0{
        return "表是空的"
    }
    p:=q.head.next
    for i:=0;i<q.length;i++{
        fmt.Printf("%v",p.data)
        p=p.next
    }
    return "打印完毕"
}
func main() {
   **//初始化队列,注意这里q应该只是LinkQ类型**
    q:=InitQ()
    //往队列里插入数据
    for i:=0;i<7;i++{
        n:=InitQnode(i)
    **  //居然可以调用AddQ并且生效了**
        q.AddQ(n)
    }
    fmt.Println(q.Show())
    q.DelQ()
    q.DelQ()
    q.DelQ()
    fmt.Println(q.Show())
}
结果:
0123456打印完毕
3456打印完毕
我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区