07 指针和map

一、指针

&:取地址
*:根据地址取值

1.new

//申请一个内存地址
var p *int
var p1 = new(int)

fmt.Println(p)  //<nil>
fmt.Println(p1) //0xc000128058

2.make

//区别于new,只用于slice、map、channel内存创建,返回类型而不是指针
var a = make([]int, 3, 5)
var b = make(map[string]int, 10)

二、map

1.定义

//方法1
var a = make(map[string]int, 1)

//方法2
var b map[string]int
b = make(map[string]int, 10)

2.判断键是否存在

var b = make(map[string]int, 10)
b["hello"] = 1
b["world"] = 2

value, ok := b["hello"]

fmt.Println(value, ok) //1 true

3.遍历

var b = make(map[string]int, 10)
b["hello"] = 1
b["world"] = 2

for key, value := range b {
	fmt.Println(key, value) //1 true
}

4.删除元素

delete(b, "hello")
### C++ 中 `std::map` 指针的使用 在 C++ 中,`std::map` 是一种关联容器,用于存储键值对。当涉及到指针时,可以有多种方式处理 `std::map` 的指针形式。 #### 定义初始化 可以通过定义一个指向 `std::map` 的指针并将其初始化为实际的对象地址: ```cpp #include <iostream> #include <map> int main() { std::map<int, int>* ptr_map = new std::map<int, int>; // 创建 map 对象的动态实例 (*ptr_map)[1] = 10; // 插入元素到 map 中 std::cout << "Value at key 1: " << (*ptr_map)[1] << std::endl; delete ptr_map; // 删除动态分配的 map 实例 return 0; } ``` 上述代码展示了如何创建一个指向 `std::map` 的指针,并通过解引用操作符访问其成员[^1]。 #### 遍历 `std::map` 指针的内容 遍历时需要先解引用指针才能调用迭代器相关的功能: ```cpp for (const auto& pair : *ptr_map) { // 解引用后使用范围 for 循环 std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl; } ``` 此部分说明了如何安全地遍历由指针所指向的地图对象中的数据项[^2]。 --- ### Go 中 Map 指针的关系 Go 语言中的地图(Maps)本身是一个引用类型,因此不需要显式的指针操作即可修改共享的数据结构。然而,在某些情况下仍然会遇到涉及指针的情况,比如将复杂类型的指针作为值存入 map 中。 #### 声明与基本用法 下面的例子演示了一个简单的场景——把结构体指针放入 map 并对其进行更新: ```go package main import ( "fmt" ) type Person struct { Name string Age int } func main() { m := make(map[string]*Person) p := &Person{"Alice", 30} // 创建一个新的 person 结构体实例 m["key"] = p // 将该实例的指针加入 map fmt.Println("Before update:", m["key"]->Name) // 输出 Alice m["key"]->Age += 5 // 修改 age 字段 fmt.Println("After update:", m["key"]->Age) // 应输出 35 } ``` 注意这里存在语法错误;实际上应该写成如下正确形式: ```go fmt.Println("Before update:", m["key"].Name) // 正确的方式去访问字段 Name m["key"].Age += 5 // 同样修正 Age 访问方式 ``` 这表明即使是在 go 中虽然 maps 自动具备一些类似于指针行为特性,但在具体细节上仍需遵循相应规则[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值