循环里 i+1的问题
大佬们 请问一下 为什么 tab 输出的结果为 2 3 4 5 4 ? 最后的4 是怎么来的?在平时写代码中也会遇到这种情况,请问怎么解决这种问题?i+1 或 i+2 后超出列表的长度之类的.
#include<stdio.h>
int tab={1,2,3,4,5};
int i;
int main()
{
for(i=0;i<5;i++){
//printf("%d ",tab);
printf("%d ",tab);
}
return 0;
}
本帖最后由 理想小青年 于 2019-9-24 07:59 编辑
输出结果: 2 3 4 5 0
内存数据:01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 00 00 00 00
这是在我电脑上运行的结果,这个问题是越界后 + 1的字符串是什么,其实tab不算越界,正好在边界,而你的输出结果可能编译器有关,你用的vc6++?
int tab,最后tab应该是\x00{:10_256:} 4是数组边界外的内存上随机存储的数值,你可以多做几个循环看看。想避免超出下标的话,可以用sizeof(tab)/sizeof(tab)。 理想小青年 发表于 2019-9-24 00:58
输出结果: 2 3 4 5 0
内存数据:01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 00 00 00...
大佬..那如果我是写一个井字棋判定输赢的代码
例如for(i=0;i<3;i++){
for(j=0;j<3;j++){
if( array==array==array )
printf("win");break;}}
那array那里 当i=2时 i+2 不就变成4了吗, 那会不会有什么影响呢? 或者要怎么修改它呢? Nxgy 发表于 2019-9-24 03:02
4是数组边界外的内存上随机存储的数值,你可以多做几个循环看看。想避免超出下标的话,可以用sizeof(tab)/s ...
大佬 如果我这个tab规定是静态内存呢?
如果我是写一个井字棋判定输赢的代码
例如for(i=0;i<3;i++){
for(j=0;j<3;j++){
if( array==array==array )
printf("win");break;}}
那array那里 当i=2时 i+2 不就变成4了吗, 那会不会有什么影响呢? 或者要怎么修改它呢? 打开调试,调试一下就知道了{:5_91:} 明知道下标越界,却任其发生,还询问越界访问到的数值来历?写代码没有节操到这个地步,我也是醉了! jackz007 发表于 2019-9-24 15:07
明知道下标越界,却任其发生,还询问越界访问到的数值来历?写代码没有节操到这个地步,我也是醉了 ...
那我应该如何阻止它i+1 这些越界呢? 有什么好的方法? 没有什么好方法,你得清楚自己所操作数组的总容量,杜绝下标越界的事情发生。 qpwoeiruyt 发表于 2019-9-24 22:50
那我应该如何阻止它i+1 这些越界呢? 有什么好的方法?
可以用另一个变量去替换i+1并判断这个变量是否越界,尽量不在语句中出现+1 -1 这种情况,我每次用这种方式去循环排序的时候总是出错,很难受. 因为数组下标溢出,4是内存里tab之后的随机值吧
页:
[1]