首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这是咋回事?关于数组

2012-03-13 
这是怎么回事?关于数组----------------------------#includeiostreamusingnamespacestdintmain(){inti

这是怎么回事?关于数组
----------------------------
#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个地址又因为很可以根本就不属于本程序所占的内存范围,那么对它赋值就极有可能破坏别的程序甚至系统的运行,造成系统崩溃。

特别是对于字符串数组,在赋值时一定要注意字符不能超过数组长度,不然很危险。

热点排行