c++ - 数组元素改变值?
问题描述
int m;
cin >> m;
int d[m],g[m];
for (int i=1;i<=m;i++){
cin >> g[i] >> d[i];
}
我将 m 设置为 3。然后我将 g[i] 和 d[i] 设置为 2 和 9、5 和 25、16 和 24(第一个数字是 g[i],第二个是 d[i])。后来在程序中 d[1] 不是 9 ,而是 24 。任何想法发生了什么?
解决方案
int m;
int d[m],g[m],
cin >> m;
我将 m 设置为 3。然后我将 g[i] 和 d[i] 设置为 2 和 9
请注意,您g
甚至d
在 set 之前声明了m
.
int m;
int d[m],g[m],
这是未定义的行为:m
未初始化,您正在尝试使用它的值。
正如评论者所指出的,您使用的是可变长度数组,它是编译器 gcc 的扩展,但不是标准 C++。现在改掉这个习惯就好了。
您可以通过先定义来修复您的代码m
,例如const int m = 3;
然后不要费心从std::cin
.
另请注意,您将在for
循环中越界:
for (int i=1;i<=m;i++){
数组是从 索引的0
,所以应该是for (int i = 0; i < m; i++)
。
更进一步,您可以从 中读取它std::cin
,然后将d
and定义g
为std::vector
:
int m = 0;
std::cin >> m;
std::vector<int> d(m), g(m);
for (int i = 0; i < m; i++)
您不想听到的内容:鉴于这里所犯的简单错误,您应该真正从书本中开始学习 C++,而不是您现在正在尝试学习它。
推荐阅读
- excel - 从 VB.Net 将多个系列数据添加到 Excel 图表
- sql - 如何使用“案例”标记一列中具有相同值的 2 个不同行
- javascript - 满足条件时禁用按键事件侦听器
- bash - 如何通过多个键查找匹配项并提取连续两行匹配项的值?
- python - 在 3D 动画中在摄像机前绘制新球体
- php - PHP - 需要使用来自 API 的 3 个非常不同的 id 来获得相同的东西
- python - 使用 for 循环从单个字典条目更新多个列表
- javascript - 从另一个分层对象创建分层对象
- angular - Angular:是什么让这个 getter(s) 与公共成员不同?
- python - 如何将 Python 数据转储到已创建的 JSON 文件夹中?