golang 指针类型* ,以及 &取变量内存地址

 

1.golang中,指针是一种类型,指向变量所在的内存单元(不是内存地址)。
申明: 在变量名前加上星号字符,比如 *age ,指向变量age所在的内存单元

2.& :获取变量在计算机内存中的地址, &age,取出变量age所在内存地址,一般地址是十六进制。

3: 申明指针*age, 打印指针内存单元的值 **age.如下面  x *int , *x就是指针所对应的值。

package main

import (
   "fmt"
   "reflect"
)

func main(){
   k:=40
   fmt.Println(k)
   fmt.Println(say("hello,world","lf"))
   fmt.Println(reflect.TypeOf(k))  //检查变量类型

   fmt.Println(&k)  // 获取变量在计算机内存中的地址,可在变量名前面加上&字符。
      // &k 引用的是变量k的值,值所在的内存地址
   showMemoryAddress(&k)  //返回的地址是相同的
}

func showMemoryAddress(x *int){     // *int参数类型位指向整数的指针,而不是整数
   fmt.Println(*x)  //本身就是指针,打印地址不需要  &这个符号,如果想使用指针指向的变量的值,而不是其内存地址,可在指针变量前面加上星号
   return
}

func say(param,tt string) string{
   return param+"--"+tt
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Golang 中,可以使用指针来操作 map。当我们传递 map 作为参数时,实际上是传递了 map 的一个副本。如果需要修改原始 map,可以传递 map 的指针,或者在函数内部返回 map 的指针。 以下是一个使用 map 指针的示例代码: ```go package main import "fmt" func main() { m := make(map[string]int) m["a"] = 1 m["b"] = 2 // 传递 map 的指针 addValue(&m, "c", 3) fmt.Println(m) // 输出:map[a:1 b:2 c:3] // 返回 map 的指针 m2 := createMap() fmt.Println(m2) // 输出:map[x:10 y:20 z:30] } func addValue(m *map[string]int, key string, value int) { (*m)[key] = value } func createMap() *map[string]int { m := make(map[string]int) m["x"] = 10 m["y"] = 20 m["z"] = 30 return &m } ``` 在上面的示例中,我们定义了两个函数,`addValue` 和 `createMap`,分别演示了如何传递 map 的指针和返回 map 的指针。在 `addValue` 函数中,我们使用 `*` 操作符来获 map 的指针,并修改了原始的 map。在 `createMap` 函数中,我们使用 `&` 操作符来返回 map 的指针。 ### 回答2: 在Go语言中,map是一种无序的键值对集合,可以用于存储和检索数据。默认情况下,map是通过值传递的,即将map赋值给另一个变量时,会复制一份map的副本。但我们也可以使用指针来操作map,从而可以在函数间共享和修改同一个map。 使用指针来操作map有两种常见的方式。一种是直接声明一个指向map的指针变量,然后通过间接引用来操作map。例如: ```go var m *map[string]int // 声明指向map的指针变量 m = &map[string]int{} // 创建一个空的map,并将其地址赋值给指针变量 (*m)["key"] = 123 // 通过指针间接引用map,并修改其值 ``` 另一种方式是使用make函数创建一个map,并将其指针传递给函数。例如: ```go func modifyMap(m *map[string]int) { (*m)["key"] = 123 // 通过指针间接引用map,并修改其值 } func main() { m := make(map[string]int) // 创建一个map modifyMap(&m) // 将map的指针传递给函数 } ``` 需要注意的是,在使用指针操作map时,要确保map已经被初始化。否则,会发生运行时错误。另外,由于map本身就是引用类型,因此大部分情况下,直接使用map而不是指针就可以满足需求,而且更加简单和安全。只有在需要在函数间传递和修改同一个map时,才需要使用指针来操作map。 ### 回答3: Golang中的map是一种无序的键值对集合,而map指针则是指向map的内存地址指针。 在使用map时,可以通过var关键字声明一个map变量,并使用make函数来初始化该map。而如果需要使用map指针,可以通过将map变量的地址赋值给指针变量来实现。 下面是一个示例代码: ``` package main import "fmt" func main() { // 声明并初始化map myMap := make(map[string]int) myMap["apple"] = 2 myMap["banana"] = 3 // 声明并初始化map指针 var myMapPtr *map[string]int myMapPtr = &myMap // 使用map指针修改map (*myMapPtr)["apple"] = 5 // 输出修改后的值 fmt.Println(myMap["apple"]) } ``` 在上述代码中,首先使用make函数初始化了一个map变量myMap,并给其中的键"apple"和"banana"分别赋值。然后,使用var关键字声明了一个map指针myMapPtr,并将myMymap的地址赋值给了myMapPtr。接下来,使用map指针修改了map中键"apple"的值为5。最后,输出了map中键"apple"的值,结果为5。 总结来说,Golang的map指针允许我们通过指针来修改和访问map的值,更灵活地操作Map的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值