编程论坛
注册
登录
编程论坛
→
C++教室
请教关于数组默认值的问题
鼻涕龙
发布于 2010-06-05 15:49, 3248 次点击
如果给出数组元素个数,如int ia[5]={3,5,7};这样赋值系统默认ia[3],ia[4]的值分别为 0, 0。
但是不给数组元素个数,如int ia[]={3,5,7};这样赋值系统默认ia[3],ia[4]的值分别为 3, 4。
为什么呢?
7 回复
#2
南国利剑
2010-06-05 15:52
第一句话对。
第二句 ,不对。
如果没有给出数组的长度,那么长度就是你在后面给出的几个数值就有几个元素。所以你所举的例子的数组ia就只有三个元素了。
#3
鼻涕龙
2010-06-05 16:26
那就是说第二句 ia[3]实际上就是ia[0]了?
个人觉得向第二句这样的系统应该会提示ia[3]不存在啊?
#4
2010-06-05 17:32
第二句输出ia[3]应该是数组下标越界 编译就不会通过吧!
#5
鼻涕龙
2010-06-05 17:38
编译通过了
#6
lintaoyn
2010-06-05 17:44
但是不给数组元素个数,如int ia[]={3,5,7};这样赋值系统默认ia[3],ia[4]的值分别为 3, 4。
ia[3],ia[4]你这样就是越界了,C++和C不检查数组有没有越界(所以是会通过编译的),有没有越界是我们自己要检查的,访问ia[3]ia[4]得到的值没什么意义,但是修改的ia[3]ia[4]的值就是很危险的事。
#7
鼻涕龙
2010-06-05 17:52
明白了!谢谢大家
#8
Isilendil
2010-06-06 13:27
典型的缓冲区溢出,a[3]和a[4]的值未必是3和4,我在自己的机器上用Dev-C++,得到的结果是4198592和4370432。
结果应该是依赖于编译器或者机器吧
1