| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1683 人关注过本帖
标题:二维数组可以这样定义竟没错误 是VC的BUG吗?
只看楼主 加入收藏
shenhua2050
Rank: 2
等 级:论坛游民
帖 子:39
专家分:14
注 册:2010-11-23
结帖率:66.67%
收藏
已结贴  问题点数:30 回复次数:11 
二维数组可以这样定义竟没错误 是VC的BUG吗?
#include<stdio.h>
main()
{
    int a[][3]={0,1,2,3,4,5,6,7,8,9,10,11,12};
    printf("%d",a[4][0]);
}
我的数组a本来想是4行3列的,最后无意间多打了一个元素,编译器没有报错,当我输出a[4][0]的时候竟然可以输出12!   兄弟们一起讨论一下,这是什么原因?(a[4][1]输出0,a[4][2]输出也是0。)
搜索更多相关主题的帖子: BUG 定义 
2010-11-26 11:16
ww稻草人
Rank: 5Rank: 5
来 自:陕西西安
等 级:职业侠客
帖 子:57
专家分:309
注 册:2010-5-11
收藏
得分:6 
     那是因为你定义数组的时候没有定义行数,只定义了列数,那样定义相当于给数组定义了15个元素,从12开始后面的值你没有给出,他就默认为0了,不信你输出a[4][1],a[4][2]看是不是0

[ 本帖最后由 ww稻草人 于 2010-11-26 11:23 编辑 ]

我的博客  http://blog..cn/daocaoren020
2010-11-26 11:21
时之鬼爵
Rank: 1
来 自:广东
等 级:新手上路
帖 子:2
专家分:6
注 册:2010-11-26
收藏
得分:6 
此数组行数定义被省略,初始化数据共13个,列数值为3,即行数为4+1=5行.
a[0][0]=0,a[1][0]=3,a[2][0]=6,a[3][0]=9,a[4][0]=12,就这样。
2010-11-26 11:26
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:6 
数组越界,C是不做这些安全检查的,对数组元素寻址也是通过指针(数组名被解析成一个指针)加偏移(下标*元素大小)
实现的,所以,你定义一个数组,C就跟你分配多大空间,输入多了它就存分配空间的后面
恩,不过说回来,好像你定义的数组没有越界!
由于第一维大小没定义([]),所以这一维是编译器计算的,你定义了13个元素,而第二维为3,,13/3>3,要4*3才能容下
即你定义的数组为a[4][3],而不是a[3][3];
2010-11-26 11:31
shenhua2050
Rank: 2
等 级:论坛游民
帖 子:39
专家分:14
注 册:2010-11-23
收藏
得分:0 
回复 3楼 时之鬼爵
我刚试了一下,a[3][3]输出是12   a[3][4]输出0   a[3][5]输出0  a[3][6]输出是随机值,好像数组列数大于3列了,呵呵 这个怎么解释的?
2010-11-26 15:11
shenhua2050
Rank: 2
等 级:论坛游民
帖 子:39
专家分:14
注 册:2010-11-23
收藏
得分:0 
回复 2楼 ww稻草人
我刚试了一下,a[3][3]输出是12   a[3][4]输出0   a[3][5]输出0  a[3][6]输出是随机值,好像数组列数大于3列了,呵呵 这个怎么解释的?
2010-11-26 15:11
shenhua2050
Rank: 2
等 级:论坛游民
帖 子:39
专家分:14
注 册:2010-11-23
收藏
得分:0 
回复 4楼 xiaomarn
我刚试了一下,a[3][3]输出是12   a[3][4]输出0   a[3][5]输出0  a[3][6]输出是随机值,好像数组列数大于3列了,呵呵 这个怎么解释的?
2010-11-26 15:12
shenhua2050
Rank: 2
等 级:论坛游民
帖 子:39
专家分:14
注 册:2010-11-23
收藏
得分:0 
回复 5楼 xugaige
我刚试了一下,a[3][3]输出是12   a[3][4]输出0   a[3][5]输出0  a[3][6]输出是随机值,好像数组列数大于3列了,呵呵 这个怎么解释的?
2010-11-26 15:12
时之鬼爵
Rank: 1
来 自:广东
等 级:新手上路
帖 子:2
专家分:6
注 册:2010-11-26
收藏
得分:0 
回复 7楼 shenhua2050
a[3][3],列数最多取2,取3就越界了=a[4][0]了...
2010-11-26 16:01
shenhua2050
Rank: 2
等 级:论坛游民
帖 子:39
专家分:14
注 册:2010-11-23
收藏
得分:0 
回复 10楼 时之鬼爵
终于明白了,谢谢了!!
2010-11-26 16:50
快速回复:二维数组可以这样定义竟没错误 是VC的BUG吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019302 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved