数组下标可以用负数吗?为何老是输出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
[解决办法]
[解决办法]
- 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
[解决办法]
越界出错