golang:指针传参

函数指针与指针函数

函数指针:是指向函数的指针变量,即本质是一个指针变量。
指针函数:本质是一个函数。函数返回类型是某一类型的指针。

package main

import "fmt"



func main() {
	// 函数指针:是一个指针,指向一个函数
	fmt.Printf("函数add的类型:%T\n", add) // 函数add的类型:func(int, int) int
	fmt.Println("打印add函数:", add) //  0x1095bc0,函数的地址,可以理解为一个特殊的变量。
	fmt.Println("函数的执行结果:", add(100, 200)) //300

	var f1 func(int, int) int = add  // 函数f1和add一样,指向同一个函数
	fmt.Println("打印f1函数:", f1) //打印f1函数: 0x4986b0
	fmt.Println("函数的执行结果:", f1(100, 200)) //300
	/*
 	结论:函数声明时,函数名本身就是一个指针。不需要加*。
			函数与函数赋值时,属于浅拷贝,拷贝指针,两个指针同时指向同一块内存空间。
 */


	res1 := fun1 // 是一个指针,指向一个函数,函数结果返回一个指针
	fmt.Printf("res1:%p,%v\n",res1,res1()) // res1:0x498900,&[1 3 5 7]
	res2 := fun1() // 是一个调用函数之后返回的指针,指向 [4]int 存储4个int类型的数组
	fmt.Printf("res2:%p,%v\n",res2,*res2) //res2:0xc04200e320,[1 3 5 7]



}

// 1.定义一个函数,求两个数的和
// 该函数的类型:func (int,int) int
func add(a, b int) int  {
	return a + b
}

//2.定义一个指针函数
func fun1() *[4]int{
	var arr [4] int
	for i:=0;i<len(arr);i++{
		arr[i] = i*2+1
	}
	fmt.Printf("数组地址:%p,数组内容:%v\n",&arr,arr) //[1 3 5 7]
	return &arr
}

整数指针作为函数传参

package main

import "fmt"

func IntPoint(a *int){
	*a = *a + 1;
}

func main() {
	a := 1;
	IntPoint(&a)
	fmt.Print(a)  // 数值为2
}

map作为函数传参

package main

import "fmt"

func MapPoint(temp map[string]string){
	temp["cd"] = "gtfrdesxxcf"
	temp["ls"] = "11111111111111111111"
}

func main() {
	a := map[string]string{
		"bidlj":"1",
		"cd":"0",
	}
	MapPoint(a)
	fmt.Print(a) //map[bidlj:1 cd:gtfrdesxxcf ls:11111111111111111111]
}

数组作为函数传参

package main

import "fmt"

func MapPoint(temp map[string]string){
	temp["cd"] = "gtfrdesxxcf"
	temp["ls"] = "11111111111111111111"
}

func ArrayPoint(temp *[]map[string]string){
	(*temp) = append((*temp), map[string]string{
		"vv":"aaa",
		"aa": "aaaaaaaaa",
	})
}

func main() {
	a := make([]map[string]string, 0)
	a = append(a, map[string]string{
		"bidlj":"1",
		"cd":"0",
	})
	ArrayPoint(&a)
	fmt.Print(a) //[map[bidlj:1 cd:0] map[aa:aaaaaaaaa vv:aaa]]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值