main()
{
int a[3]={1,2,3};
a[8]=5;
printf("\n%d\n",sizeof(a)/sizeof(int));
getchar();
}
上面这段代码为什么显示的长度还是为3呀?我想知道,我定义的数组长度本来是3,再在下标为8的地方再给它赋值,这样系统也是允许的。这很定有问题但我不知道是什么问题,请高手解答!!!
我想知道的是,既然已经定义了数组长度,怎么工再取数组下标为8的时候,这部分空间应该是没有得到系统的分配的,按理就会出现系统错误才对呀
追答你怎么知道没有分配呢?比如你再定义个double b,就可能使用了这段空间
追问因为我定义界限就是3个int类型长度,难道,只要定义一下数组类型那么它的长度就是不确定的吗?我希望您能给我解释清楚点,谢谢您了!
追答定义一个数组,开辟一段内存空间,这段内存空间并不会像被围墙围住一样被封死,合理地利用这个数组,需要程序员自己控制。只定义了这段空间,只有这段空间内的数据对于你当前的程序是合理的,越界的话就不知道你访问到哪里去了,它可能属于机器上任何一个运行着的进程,因为机器上的进程使用的都是这一条内存。如果你修改了你越界访问到的数据,可能会造成未知的错误。
int a[3] = {1,2,3};这样的定义,a表示的是开辟的这一段空间的首地址,[]里的数字表示相对这个地址的偏移量,访问数组是这样进行的
你可以通过sizeof()获得某个类型的大小,但是程序运行时不会去检查下标是否越界。这样的检查是需要耗费资源的,理想的情况下,这样做对于程序运行也没有意义。C/C++没有这样做这样的检查,C# 、java 都是有这样的检查的
好的,非常感谢你的耐心解答谢谢你了!