当前位置: 代码迷 >> 综合 >> golang-数组做函数参数
  详细解决方案

golang-数组做函数参数

热度:114   发布时间:2023-10-13 09:24:56.0

如果Go中的数组作为函数的参数,那么实际传递的参数是一份数组的拷贝,而不是数组的指针。(C/C++区分)
首先看一下C++的代码:

#include <iostream>
#include<map>
using namespace std;void fun(int a[]){
    a[0]=100;
}int main(){
    int a[4]={
    1,2,3,4};fun(a);cout<<a[0];return 0;
}

执行结果:a[0]=100
再看一下golang的代码:

package mainimport "fmt"func sum(a [4]int){
    a[0]=100
}func main(){
    a:=[4]int{
    1,1,1,1}//数组sum(a)fmt.Println(a[0])
}

执行结果:a[0]=1

go语言中针对这种问题解决方法有两种:
方法一:传递数组的地址操作

package mainimport "fmt"func sum(a *[4]int){
    //指针a[0]=100
}func main(){
    a:=[4]int{
    1,1,1,1}sum(&a)//引用fmt.Println(a[0])
}

执行结果:a[0]=100

方法二:使用切片代替数组(切片和数组的区别可参考:切片数组区别)

package mainimport "fmt"func sum(a []int){
    a[0]=100
}func main(){
    a:=[]int{
    1,1,1,1}//切片sum(a)fmt.Println(a[0])
}

执行结果:a[0]=100