数组的下标可以小于零吗?
解决时间 2021-02-18 02:48
- 提问者网友:wodetian
- 2021-02-17 18:36
//bounds.c--超出数组的边界
#include
#define SIZE 4
void main()
{
int valuel=44;
int arr[SIZE];
int value2=88;
int i;
printf("value1=%d,value2=%d\n",value1,value2);
for(i=-1;i arr[i]=2*i+1;
for(i=-1;i<7;i++)
printf("%2d%d\n",i,arr[i]);
printf("value1=%d,value2=%d\n",value1,value2);
}
结果:
value1=44,value2=88
-1 -1
0 1
1 3
2 5
3 7
4 9
5 6684216
6 4199081
数组的下标可以小于零吗?
有人说arr[-1]表示*(arr-1),也有人说是*(arr+0xffff),(0xffff是-1的补码表示形式),到底哪一个呢?
最佳答案
- 五星知识达人网友:酒醒三更
- 2021-02-17 19:15
数组的下标是不可以小于0的
你的程序咋看起来好象是通过了,实际上arr[-1]已经越界了,指向了arr前一个内存单元去了。
全部回答
- 1楼网友:未来江山和你
- 2021-02-17 20:34
还满意回答,完全是无人子弟!
正解应该是楼主说的那个,表示0xfffff
如果你的那道题限定的内存足够大就可以AC,否则会给一个MLE;
特别是做标记功能的数组要小心这一点!
至于RE,在比赛的时候我们通常当成超过上界处理,即数组开小了。
- 2楼网友:掌灯师
- 2021-02-17 20:12
你要知道在C语言里,数组基本等同于指针的,[]操作也可以用于任何像地址的东西,所以,下标可以是任何整数.
但是这样做的意义比较小,因为这样的结果是你不能控制的,你读取了定义以外的数据,那些东西可能属于其他数据,甚至系统数据,结果就是程序崩溃.当然不排除有目的的使用这一技巧达到某些特殊目的的程序,不过我还没见到过.....
- 3楼网友:枭雄戏美人
- 2021-02-17 19:28
可以
我要举报
大家都在看
推荐资讯