| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1798 人关注过本帖
标题:[求助]数组下标越界问题
取消只看楼主 加入收藏
wjz1979
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-25
收藏
 问题点数:0 回复次数:6 
[求助]数组下标越界问题

这是二级教程上面的一道题:
以下程序的输出结果是
A)不确定的值 B)3 C)2 D)1
main()
{
int n[2]={0},i,j,k=2;
for(i=0;i<k;i++)
for(j=0;j<k;j++
n[j]=n[i]+1
printf("%d\n",n[k]);
}

这道题应该不难,因为k=2,所以n[2]已经下标越界,应该输出不确定的值,应该选A;但我在TC2.0上运行了多次,输出结果都是2。哪位大侠能给解释一下下,谢谢啊!!!!!!

搜索更多相关主题的帖子: 越界 
2006-08-25 07:50
wjz1979
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-25
收藏
得分:0 

我没有开玩笑,这是二级教程课本上的一道习题,我是教二级C语言的,我一看这个题,第一反应确实是选A,但在TC2.0上也确实是输出2.另外我用F8单步执行的时候,执行到
int n[2]={0},i,j,k=2;这一句时n[2]的值确实是个随机数,但在这个定义语句之后,
n[2]的值就是2.另外,我把2改成3,4,5的时候,对应的n[k]就变成3,4,5,所以说我认为tc把数组之后的那个空间用来存放数组的个数,(我没有验证其他的数据类型),到底是不是这样呢,请高手赐教!!!!!!!!!!!!

2006-08-26 11:46
wjz1979
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-25
收藏
得分:0 
题目怎么不正确了????????
2006-08-26 12:41
wjz1979
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-25
收藏
得分:0 
看不出来
请指点一下
2006-08-26 12:51
wjz1979
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-25
收藏
得分:0 

不指点就算了
2006-08-26 13:08
wjz1979
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-25
收藏
得分:0 
我重新测试了一下,有了一点眉目.定义一个数组之后,它下边的第一个空间,分配给第一个赋值的变量.举个例子: int a[5],i,j=10,k; 那么a[5]的值就是10,如果是
int a[5],i=8,j=10,k;那么a[5]的值就是8.(我只测试了基本整型.)为什么会这样呢,这是TC的规定吗?那么这个题目又选什么呢?
2006-08-26 14:00
wjz1979
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-8-25
收藏
得分:0 
以下是引用soft_wind在2006-8-25 8:27:21的发言:
当然改了再编译
tc2.0结果确实是2,不同的编译器结果很可能不一样,这没什么。
唯一能解释的理由应该是TC可能是按照内存地址递增的方式(或按某一特定的规则)来给变量分配内存,也就是说在数组n[]后面,n[2]是i,j,k某一个变量的所属空间.

唯一能解释的理由应该是TC可能是按照内存地址递增的方式(或按某一特定的规则)来给变量分配内存。这位仁兄说的不错。那么按照TC的规则,这个题的结果是输出2。那么选C
吗?个人倾向认为是选A,有支持的吗?

2006-08-26 14:08
快速回复:[求助]数组下标越界问题
数据加载中...
 
   



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

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