Go语言函数的形参

package main

import "fmt"

func main()  {

    var num int

    num = 10

    //因为形参是指针,所以要传地址

    MyFunc(&num)

}

//形参作为指针

func MyFunc(param *int) {

    //输出 :param所指向内存空间的地址

    //输出:10

    fmt.Println(param , (*param))

}

若在MyFunc中对param进行操作会修改num的原值吗?

func main() {

    var num int

    num = 10

    fmt.Println("调用MyFunc之前我的值为:", num, &num)

    //因为形参是指针,所以要传地址

    MyFunc(&num)

    fmt.Println("调用MyFunc之后我的值为:", num, &num)

}

//形参作为指针

func MyFunc(param *int) {

    fmt.Println("我是MyFunc():", param, (*param))

    //这里修改了param里的值

    (*param) = 100

}
image

若将切片做为形参又该如何传入?

//切片传参

func foo(slice []int) []int {

    for i, _ := range slice {

        fmt.Println(&slice[i])

        slice[i] += 1

    }

    fmt.Println(cap(slice))

    return slice

}

func main() {

    slice := []int{0, 1, 2, 3, 4}

    fmt.Println("调用foo之前", slice, "我的首地址", &slice[0])

    fmt.Println("调用foo之后", foo(slice), cap(slice))

}
image

数组做为函数的形参

func main() {

    /*数组的申明方式*/

    //var array [5]int

    //array := [10]int

    //array := [...]int{0,0,0,0,0}

    array := [5]int{1, 2, 3}

    array1 := array

    //这里进行了改值

    array1[0] = 10

    /*两种for循环方式*/

    for _, a := range array {

        fmt.Printf("%d ", a)

    }

    fmt.Printf("\r\n")

    for i := 0; i < len(array1); i++ {

        fmt.Printf("%d ", array1[i])

    }

    fmt.Printf("\r\n")

    //调用函数

    PPoint(&array)

}

//PPpoint 形参为指针数组

//写法和C语言不太一样

func PPoint(p *[5]int) {

    for _, a := range p {

        fmt.Println(a)

    }

}
image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容