首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数组下标可以用负数吗?为何老是输出0解决思路

2012-04-24 
数组下标可以用负数吗?为何老是输出0#include stdio.hvoid main(){int b[400],i0printf(%3d\n,b[i-1

数组下标可以用负数吗?为何老是输出0
#include "stdio.h"
void main(){
  int b[400],i=0;
printf("%3d\n",b[i-1]);
printf("%3d\n",b[i]);
printf("%3d\n",b[i+1]);
printf("%3d",b[i+2]);
}
请问为何第一个老是输出0,是不是B【-1】就是输出0?好像没数组b[400]输出的就是地址码

[解决办法]
当然支持-1,-1下标就是b所在内存前面一个内存的值,看看下面代码的输出

C/C++ code
#include "stdio.h"#include <stdio.h>int main(){  int a = 1;  int b[400],i=0;  int b =2;printf("%3d\n",b[i-1]);printf("%3d\n",b[i]);printf("%3d\n",b[i+1]);printf("%3d",b[i+2]);}
[解决办法]
0040133Bdec eax
0040133Cmov eax,DWORD PTR [esp+eax*4+0x1c]
估计你的地址空间刚好一直没被赋值一直为0
[解决办法]
you should check the assembly code.
Assembly code
;space will be allocate like thisintsize=4push ebpmov ebp, espsub esp, intsize     ; space for isub esp, 100*intsize ; space for a
[解决办法]
探讨
引用:
输出什么值一般是随机的。当然也可能输出其他变量的值

第一个每次都输出0

[解决办法]
C/C++ code
#include <stdio.h>#include <string.h>#include "stdio.h"void main(){  int b[400],i=2;printf("%3d\n",b[i-3]);printf("%3d\n",b[i]);printf("%3d\n",b[i+1]);printf("%3d",b[i+2]);}
[解决办法]
支持zyj_604的说法,i先入栈,取值的时候是按压入数组首地址加偏移取的,刚好取到i
[解决办法]
越界出错

热点排行