go - 没有返回值的 Go 函数如何修改数据?
问题描述
我不明白bubbleSort() 切片a
如何应用于main()。
我不给return a
也不写全局变量。
package main
import (
"fmt"
)
func bubbleSort(a []int) {
var temp int
for j := 0; j < len(a); j++ {
for i := 0; i < (len(a) - 1); i++ {
if a[i] > a[i+1] {
temp = a[i]
a[i] = a[i+1]
a[i+1] = temp
}
}
}
}
func inputNums() []int {
var input int
var number int
fmt.Scan(&input)
s := make([]int, input)
for i := 0; i < input; i++ {
fmt.Scan(&number)
s[i] = number
}
return s
}
func outputNums(b []int) {
for i := 0; i < len(b); i++ {
fmt.Print(b[i])
fmt.Print(" ")
}
}
func main() {
nums := inputNums()
bubbleSort(nums)
outputNums(nums)
}
解决方案
src/runtime/slice.go
type slice struct { array unsafe.Pointer len int cap int }
在 Go 中,所有参数都是按值传递的。切片描述符是一个结构,按值传递,就像通过赋值一样。切片描述符包含一个指向其底层数组的指针。
func bubbleSort(a []int)
按值接收a
参数,但使用指针a.array
修改底层数组元素。
参考:
推荐阅读
- android - Xamarin Android 应用程序在发布模式下启动时崩溃在调试模式下工作正常
- dart - Flutter:如果 String-Variable 从其他方法更改,则更改文本字段
- linux - 使用 exec、shell_exec 和反引号运行 ionic Cordova 命令并返回空路径
- python - 如何使用python执行这个sql查询
- python - PyCUDA在使用多个块处理矩阵运算时,为什么矩阵大小必须能被块大小整除?
- git - 基于 git commit ID 构建 docker 镜像等的 Jenkins CI/CD 流程
- html - 如何使用物化创建面向列的布局?
- php - 每个新月重置倒计时
- python - 在同一行的 Jupyter 上交替使用 Shell 和 Python 命令
- android - 允许 Android 生成推送令牌的网络配置