c语言中数组的下标可以是负号,在代码运行前不会对数组是否下标越界、溢出等异常进行警告或处理,因此需人为干预。
测试代码:
#include<stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int array[]={1,2,3,4,5,6};
int *p;
int offset;
if(argc == 2)
offset = atoi(argv[1]);
else
offset =3;
if(offset<1 || offset >5)
offset=3;
p=array+ offset;
printf("%d \n", p[-1]);
return 0;
}
运行效果:
alen@ubuntu:/work/c$ gcc -o test_array test_array.c
alen@ubuntu:/work/c$ ./test_array
3
alen@ubuntu:/work/c$ ./test_array 2
2
alen@ubuntu:/work/c$ ./test_array 3
3
alen@ubuntu:/work/c$ ./test_array 4
4
alen@ubuntu:/work/c$ ./test_array 5
5
alen@ubuntu:/work/c$ ./test_array 1
1
alen@ubuntu:/work/c$ ./test_array 1 rr
3