当前位置: 首页 > wzjs >正文

yellow网站推广联盟网页不能下载的wordpress

yellow网站推广联盟,网页不能下载的wordpress,网页图片转换成pdf文件,wordpress识图插件LeetCode 94. 二叉树的中序遍历 这是一道非常基础的模版题,因此就不放出题目描述及输入输出示例和数据范围了。 在用 Golang 重新做这道题的时候,我发现了一个有关 slice 的问题,那就是 slice 类型作为形参时,由于我们已经知道 s…

LeetCode 94. 二叉树的中序遍历

在这里插入图片描述
这是一道非常基础的模版题,因此就不放出题目描述及输入输出示例和数据范围了。

在用 Golang 重新做这道题的时候,我发现了一个有关 slice 的问题,那就是 slice 类型作为形参时,由于我们已经知道 slice 类型是底层数组的一个视图,是引用类型,那么按理说对它在函数中进行的修改在函数返回时,它的传入实参也应该已经得到相应的修改。

但事实却与预期不符,如果直接以 slice 作为形参,那么无法返回正确的中序遍历结果:

// ❌ 无法得到预期的结果
/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func inorderTraverse(node *TreeNode, ans []int) {if node == nil {return}inorderTraverse(node.Left, ans)ans = append(ans, node.Val)inorderTraverse(node.Right, ans)
}func inorderTraversal(root *TreeNode) []int {ans := []int{}inorderTraverse(root, ans)return ans
}

但是当我把形参换位 slice 的指针之后,却能够得到正确的结果,这不禁引发了我的思考:既然 slice 已经是引用类型了,为什么还需要传入指针才能完成对实参的修改呢?

想要回答这个问题,我们需要首先回顾 Golang slice 的底层原理。Golang 的 slice 有三个字段,分别是 unsafe.Pointer,指向底层数组,以及 lencap,分别表示当前 slice 的长度以及容量。

因此如果我们朴素地传入一个 slice,并且在函数中调用了 append,那么很有可能 slice 的 lencap 会在函数中被修改,而由于 Golang 只有传值调用,我们传入的 slice 当中只有 unsafe.Pointer 字段指向底层数组的地址,但 lencap 字段是从函数外部通过调用复制进来的。所以在函数内部,底层数组当中的值确实被修改了,函数内部复制的 slice 的 lencap 也被修改了,但是 lencap 的修改对外部不可见。

综上,如果我们传值调用一个 slice 类型,那么它的 lencap 字段仍然是复制进函数的,函数内部对 lencap 的修改与外部实参无关。

所以如果我们想要使用 ans 这个 slice 保存正确的结果,应该传入 slice 的指针:

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func inorderTraverse(node *TreeNode, ans *[]int) {if node == nil {return}inorderTraverse(node.Left, ans)*ans = append(*ans, node.Val)inorderTraverse(node.Right, ans)
}func inorderTraversal(root *TreeNode) []int {ans := []int{}inorderTraverse(root, &ans)return ans
}

文章转载自:

http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://00000000.qbgfp.cn
http://www.dtcms.com/wzjs/620448.html

相关文章:

  • 在家做网站设计什么网站容易做百度权重
  • 深圳网站开发哪家专业教学ppt模板免费下载完整版
  • 做网站要做相应的app吗外包网站开发合同
  • 平度推广网站建设临安做企业网站的公司
  • 滕州个人兼职做网站管理咨询网站建设
  • 天河建设网站公司网上注册公司的章程怎么下载出来
  • 有做学历在网站能查的到的网站建设平台官网要点有哪些
  • 保定哪家做网站公司好wordpress删除版权信息
  • 正规的app网站开发成都旅游学院简介
  • 如何撤销网站备案青岛seo排名公司
  • seo网站推广怎样深圳网站设计公司行业
  • 哪个网站建网页比较好备案查询工信部
  • 五寨网站建设安徽省建设工程信息网网
  • 怎么做视频解析网站吗河南省村镇建设处网站
  • 网页界面设计一般使用的分辨率东莞百度seo找哪里
  • discuz网站搬家教程网站建设的特征
  • 贵阳讯玛网站建设wordpress 图片墙
  • win7 网站系统怎么做友情链接购买
  • 刷单类网站开发wordpress zhong
  • 天津市津南区教育网站建设招标揭阳企业网页制作公司
  • 想自己做网站苏州专业做优化公司
  • 网站建设 腾云网络推广的方法
  • 网站横幅怎做西青网站文化建设
  • 河南网站建设37518企业网站改版方案
  • 网站制作哪些类型推广公司如何找客户
  • 夫妻性做受视频什么网站一站式服务平台登录
  • 网站建设 焦作照片展示网站模板
  • 软件开发流程管理系统长春seo公司长春网站设计
  • 怎么通过数据库做网站的登录免费的网站搭建
  • 苏州设置网站建设太原首页推广