C++数组int tmp[] = {0};int tmp[128] = {0};的区别
C++数组int tmp[] = {0};int tmp[128] = {0};有什么区别?
我查了https://www.runoob.com/cplusplus/cpp-arrays.html
现阶段的理解:我理解下来int tmp[] = {0};相当于int tmp[1] = {0};这里面只有一个元素0
int tmp[128] = {0};这里是初始化了128个0
疑问:但是为什么int tmp[] = {0};有时候用起来像初始化了n个元素,有时候又不行,我不明白
具体实例如下:
(1)字符个数统计题目——————————————————int tmp[] = {0};不行的例子
代码
include<iostream>
include<string>
include<set>
using namespace std;
//思路:哈希,定义一个数组,出现过则记为1,最后统计1的个数;
int main(){
string str;
int tmp[128] = {0};//临时数组,用来标记-----------------------------------------------------------
cin >> str;
int count = 0;//计数
for(int i = 0; i <= str.length()-1; i++){
int t = (int)str[i];
/和别人不一样的点int tmp[]={0};没具体定义有128位,计算出来的个数就不对了,这是为什么/
if(tmp[t] == 0){
tmp[t] = 1;
count++;
}
}
cout << count <<endl;
return 0;
}
(2)合并表记录题目——————————————————int tmp[] = {0};可以的例子
代码
include<iostream>
include<map>//哈希map,map会以键从小到大排序
using namespace std;
int main(){
int n, index, value;//键值对个数
map<int, int> mp;//map中的键是唯一的,若index重复,value则会被覆盖
int tmp[] = {0};//如果index没有出现过则为0,出现则记为1----------------------------------
cin >> n;
while(n--){
cin >> index >> value;
if(tmp[index] == 0){
tmp[index] = 1;
mp[index] = value;
}else{
mp[index] = mp[index] + value;
}
}
for(map<int, int>::iterator it = mp.begin(); it != mp.end(); it++){
cout << it->first <<" "<< it->second <<endl;
}
return 0;
}
第一次用这个提问,不知道怎么编辑这个格式,有点丑。。。
盼回复
回答
int tmp[] = {0} 你的理解没问题,就是只初始化了一个数字,但是C++中数组和指针在编译器看来都是一样的,所以哪怕你只写 了一个数字在tmp里面,tmp[1], tmp[2] 你也是可以访问的,它们位于tmp指向的指针地址的1sizeof(int)和2sizeof(int)处,它们的值是脏值,没有被初始化成0。