首页 新闻 会员 周边 捐助

C++数组int tmp[] = {0};int tmp[128] = {0};的区别

0
悬赏园豆:100 [已解决问题] 解决于 2022-06-01 22:21

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;
}

第一次用这个提问,不知道怎么编辑这个格式,有点丑。。。
盼回复

芯琪77的主页 芯琪77 | 初学一级 | 园豆:112
提问于:2022-05-28 11:22

支持 markdown 语法

dudu 2年前
< >
分享
最佳答案
1

int tmp[] = {0} 你的理解没问题,就是只初始化了一个数字,但是C++中数组和指针在编译器看来都是一样的,所以哪怕你只写 了一个数字在tmp里面,tmp[1], tmp[2] 你也是可以访问的,它们位于tmp指向的指针地址的1sizeof(int)和2sizeof(int)处,它们的值是脏值,没有被初始化成0。

收获园豆:100
老胡写代码 | 菜鸟二级 |园豆:302 | 2022-06-01 12:40

好的,非常感谢,这是最好的六一礼物了

芯琪77 | 园豆:112 (初学一级) | 2022-06-01 22:17

@芯琪77: 客气了哈!

老胡写代码 | 园豆:302 (菜鸟二级) | 2022-06-06 17:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册