You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio中C++代码逻辑错误:数组输出地址而非内容

解决C++中数组内容输出为地址的问题

我太懂这种踩坑的感觉了——本来想打印对应月份的天数,结果输出一串莫名其妙的地址数字,肯定一脸懵对吧?咱们来把这个问题拆解清楚,快速解决它。

核心问题:你可能直接输出了数组名,而非数组的指定元素

在C++里,数组名本身代表的是数组首元素的地址,如果你直接写:

cout << MonthDays;

那输出的必然是数组的内存地址,而不是你想要的对应月份天数。正确的做法是通过下标访问数组的指定元素,也就是用MonthDays[checker]来获取对应索引的内容。

接下来要确认两个关键点:

  1. checker的取值是否正确
    你是通过字符串类型的month来转换出checker的,这里一定要保证转换后的checker是合法的数组索引。比如你的MonthDays是存储12个月天数的数组,索引应该是0到11(对应1月到12月),或者1到12(如果数组是从索引1开始存的)。
    举个例子,如果你的数组初始化是:

    // 索引0对应1月,1对应2月...11对应12月
    int MonthDays[] = {31,28,31,30,31,30,31,31,30,31,30,31};
    

    那当month是"January"时,checker应该被赋值为0;如果是"February",赋值为1,以此类推。要是转换逻辑出错(比如大小写不匹配、字符串判断写错),checker会拿到错误值,就算用了下标访问也会输出错误的天数。

  2. 修改第79行的打印代码
    把原来的打印语句改成下标访问的形式:

    // 假设你原来写的是 cout << MonthDays;
    cout << MonthDays[checker]; // 这样就能输出对应月份的天数了
    

额外的小提醒

如果checker的数值超出了数组的索引范围(比如小于0或者大于等于12),会触发未定义行为——可能输出奇怪的数字,甚至直接崩溃。所以写完转换逻辑后,最好加个判断验证checker的合法性,比如:

if(checker >=0 && checker <12){
    cout << MonthDays[checker];
} else {
    cout << "无效的月份!";
}

这样应该就能解决你输出地址的问题了,赶紧去试试吧!

内容的提问来源于stack exchange,提问作者Anchara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:53:21