第1个回答 2020-06-07
char
c[5];
只是在内存中开辟了一段连续的区间
:
类型是char
长度是5
但如果你继续操作
c[n]
(n>4)
,
也是可以的,实际上就是相当于继续操作紧挨着数组后面的一段内存区;编译器只会警告,不会报错;
我刚用
IAR
FOR
AVR
做了个实验:提示下标超限
subscript
out
of
the
range;
Done.
0
error(s),
1
warning(s)
所以在编写程序时,程序员一定要注意数组的下标不要超限(尤其是用指针操作时);以免错改了其他被分配到这个地址的变量,引起错误;
例如
程序中有
char
c[5]
=
{0};
//
地址是
0x10_0x14
char
DATA
=
0x55;//
地址是
0x15
一旦你误操作
c[0]
=
c[5];//实际是将地址0x15中的值0x55赋给c[0]
而如果是
c[5]
=
0x00;//那么实际上是地址0x15中的值变了;即误改了变量DATA的值
希望能够帮到你,嘿嘿