我来自C背景并在C风格中传递数组导致错误.
请帮助
package main
import "fmt"
func f(a *int){
fmt.Println(a[1])
}
func main(){
var a [100]int
a[1]=100
f(a)
}
Run Code Online (Sandbox Code Playgroud)
Error :: 不能在f的参数中使用a(type [100] int)作为类型*int
正如其他人在评论中提到的那样,您可能希望使用切片而不是数组.切片已通过引用传递,因此无需指定指针.make下面的语句创建了一个int(由数组支持).在下面的代码中,我给它的长度为2,容量为100,以满足您分配索引1的目标.
import (
"fmt"
)
func f(a []int) {
fmt.Println(a[1])
}
func main() {
a := make([]int, 2, 100)
a[1] = 100
f(a)
}
Run Code Online (Sandbox Code Playgroud)
要回答最初的问题,您可以传递一个指向数组的指针,以通过引用传递数组。
\n\n例如,以下函数更改包含 3 个整数的数组的内容。
\n\nfunc change(ptr *[3]int) {\n ptr[2] = 20\n}\nRun Code Online (Sandbox Code Playgroud)\n\n您可以通过传递指向原始数组的指针来调用它:
\n\nchange(&arr)\nRun Code Online (Sandbox Code Playgroud)\n\n完整示例:
\n\npackage main\n\nimport (\n "fmt"\n)\n\nfunc main() {\n grades := [3]int {1, 2, 3}\n\n fmt.Printf("\\nOriginal array:\\n")\n for i, v := range grades {\n fmt.Printf("arr[%d] = %d\\n", i, v) // prints 1 2 3\n }\n\n change(&grades)\n fmt.Printf("\\nModified grades:\\n")\n for i, v := range grades {\n fmt.Printf("arr[%d] = %d\\n", i, v) // prints 1 2 20\n }\n}\n\nfunc change(ptr*[3]int) {\n ptr[2] = 20\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在您的示例中,f需要一个指向整数的指针,
func f(a *int) // a points to an integer\nRun Code Online (Sandbox Code Playgroud)\n\n然后你向它传递一个数组,
\n\nvar a [100]int\nf(a)\nRun Code Online (Sandbox Code Playgroud)\n\n因此它给了你错误cannot use a (type [100]int) as type *int in argument to f。
尽管将指针传递给数组是有效的,并且允许被调用的函数更改 caller\xe2\x80\x99s 变量,但数组的大小仍然是固定的。因此,建议使用切片,切片通过引用传递并且大小是动态的。
\n| 归档时间: |
|
| 查看次数: |
12641 次 |
| 最近记录: |