这是怎么回事?关于数组
----------------------------
#include <iostream>
using namespace std;
int
main()
{
int ia[2*3 -6];
ia[2] = 1;
cout < < ia[2] < <endl;
return 0;
}
-----------------------------
输出为
1
帮忙解释一下吧,谢谢!
[解决办法]
有的平台上是编译通不过的。因为数组大小为0。就可能通不过。后面又引用了下标2,更通不过。
也有的也许可以通过。因为数组下标访问,其实就是通过指针访问。
ia[2] = 1;就是*(ia+2) = 1;
所以,就可以喽。
但总之,这样的代码还是不正确的。依赖于个别编译器。呵呵
[解决办法]
有的编译器是允许这么做的,因为它不会检查数组是否越界。
数组工作方式就是a[n]=a[0]+单个数据长度*n,因此比如你定义的是int a[0],而且地址刚好就在2000,那么a[1]就在2004开始的4个单元里,而这2004开始的4个地址又因为很可以根本就不属于本程序所占的内存范围,那么对它赋值就极有可能破坏别的程序甚至系统的运行,造成系统崩溃。
特别是对于字符串数组,在赋值时一定要注意字符不能超过数组长度,不然很危险。