在C ++中,循环值不会在循环外更新

时间:2014-02-28 06:35:49

标签: c++

我这里有问题。当我尝试在循环外部访问t1[val]时,我得到一个垃圾值。

int P[ ]={3,7,6,5,2,4,1,8};
int N[ ]={8,6,7,2,5,3,4,1}; 
int r= (sizeof(P)/sizeof(*P));
int s= (sizeof(N)/sizeof(*N));
int val=r/2 ;
int t1[val],t2[val],t3[val],t4[val],n=0,p=0;

for(int m=0;m< val;m++){
  t1[n]=P[m];
  t2[n]=N[m];
  n++;
}

cout << t1[val];

3 个答案:

答案 0 :(得分:4)

数组索引从0开始,因此int t1[val]的较高有效索引为val-1,而不是val

此外,您只需指定值val-1

for(int m=0;m<val;m++)
//          ^ runs only while m<val, e.g. until (inclusive) m==val-1

答案 1 :(得分:2)

cout<<t1[val]; 

正在尝试访问元素val+1(数组索引范围从0val-1

如果你需要输出所有的val,则在它上面运行for循环。

for (int i=0; i< val; i++)
  cout<<t1[i];

答案 2 :(得分:0)

检查你的循环,它仅限于&lt; val 表示数组值从 0 写入 val-1 ,这就是为什么当您尝试在 t1打印值时val] 它给了垃圾价值,我不知道你想要做什么但是以下面的方式改变你的循环将解决你的目的

for(int m=0;m<=val;m++)

即使上面的代码适合你,这也是错误的做法,因为它会将值写入数组边界之外,这是不好的,甚至C ++编译器也不会为此引发任何异常。

因此建议使用以下语句打印数组的最后一个元素

cout<<t1[val-1]