对一个数组赋值,为什么会改变另一个数组的值。

C语言 码拜 9年前 (2015-10-20) 1494次浏览
float OUT_ARI_TEM_AM[30];

float OUT_AIR_HUM_AM[30];
case 0x0D:
{

//int8_t j;

c=conversion(i);

c=c*0.1;

for(j=29;j>=0;j–)

{

OUT_ARI_TEM_AM[j+1]=OUT_ARI_TEM_AM[j];

}

OUT_ARI_TEM_AM[0]=c;

break;

}

case 0x0E:

{

//int8_t j;

c=conversion(i);

c=c*0.1;

for(j=29;j>=0;j–)

{

OUT_AIR_HUM_AM[j+1]=OUT_AIR_HUM_AM[j];

}

OUT_AIR_HUM_AM[0]=c;

break;

}
这个switch,先是调到了case 0x0E后OUT_AIR_HUM_AM[0]被赋了一个值,再调到case 0x0D时,执行OUT_ARI_TEM_AM[j+1]=OUT_ARI_TEM_AM[j];时OUT_AIR_HUM_AM[0]的值也同时被改变,这是为什么,要怎么解决呢,谢谢

解决方案:25分
j为29时j+1是30越界了
解决方案:5分
++

解决方案:5分
编译器缺少越位 吹哨!
解决方案:5分
for(j=29;j>=0;j–)

{

OUT_ARI_TEM_AM[j+1]=OUT_ARI_TEM_AM[j];

}
j=29的时候 j+1就是30

OUT_ARI_TEM_AM[30] 已经越界。对其操作其结果是不可预料的。
至于对30下标赋值改变了另外一个数组。只不是是刚好另外一个数组的内存在30这里。
不知道你知道for执行的顺序不。明明+1了。
for(1;2;4)

{

3

}
执行顺序 1 2 3 4.这么循环下去,直到退出


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明对一个数组赋值,为什么会改变另一个数组的值。
喜欢 (0)
[1034331897@qq.com]
分享 (0)