指针和Map

请看下面段代码,首先请猜测一下是否正确。
 map<int* , int> pMap ;
 int A[100];
 for(int i=0;i<100;i++){
  *(A+i) = i;
  pMap[A+i] = A[i]+1;
 }

怎么样,看下来有点眼花缭乱吧,究竟这个pMap里面存放的是什么呢?为了搞清楚这个问题,我们还是要从指针入手。

搞清楚什么是指针,指针里存放的是什么内容。指针是指向一块内存中的存储区域,指针中存放的是段内存的开始地址,是一个整形数据,占用4个字节,搞清楚这点后,对pMap或许应该有一个清楚的认识。

pMap中的键是一个指针,其指向是一个int类型数据块开始的地址,因此在本例 pMap[A+i] = A[i]+1;
其键存放的是一个16进制的整数类型,这里其存放的就是数组中的每个元素的地址,因此如果你用下面代码测试一下就会发现其存放的就是地址

map<int* , int>::iterator it= pMap.begin();
 while(it != pMap.end())
 {
  cout<<(*(it++)->first)<<endl;
 }

这样输出的结果就是数组顺序输出的结果。


下面我想应该不用再做其它分析了。注意一点pMap[A+i] = A[i]+1;并没有改变数组中数据的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值