请看下面段代码,首先请猜测一下是否正确。
怎么样,看下来有点眼花缭乱吧,究竟这个pMap里面存放的是什么呢?为了搞清楚这个问题,我们还是要从指针入手。
搞清楚什么是指针,指针里存放的是什么内容。指针是指向一块内存中的存储区域,指针中存放的是段内存的开始地址,是一个整形数据,占用4个字节,搞清楚这点后,对pMap或许应该有一个清楚的认识。
pMap中的键是一个指针,其指向是一个int类型数据块开始的地址,因此在本例 pMap[A+i] = A[i]+1;
其键存放的是一个16进制的整数类型,这里其存放的就是数组中的每个元素的地址,因此如果你用下面代码测试一下就会发现其存放的就是地址
这样输出的结果就是数组顺序输出的结果。
下面我想应该不用再做其它分析了。注意一点pMap[A+i] = A[i]+1;并没有改变数组中数据的值。
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;并没有改变数组中数据的值。