| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 606 人关注过本帖
标题:关于一维数组的输出值的问题
只看楼主 加入收藏
shyboy68
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-2-4
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
关于一维数组的输出值的问题
程序如下:
# include <stdio.h>
main ()
{
    int i ;     
    int b[20] ;   
    for (i =100 ; i<125 ; ++i)
        printf ("%d \n" , b[20]);
    return 0 ;
}
我用VC++6.0调试结果为输出100----124,我有2个疑问
1, 我没有给数组赋值,为什么有值输出?
2,我定义了数组的长度为20,为什么输出从100--124的元素?
搜索更多相关主题的帖子: include 
2015-02-04 12:15
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
你数组里并没有b(20)元素,数组溢出,溢出的位置正好是变量i所在位置

能编个毛线衣吗?
2015-02-04 12:43
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:5 
我打印了b[20]和i的地址,还真的是一样的
    printf("0x%08x---0x%08x \n", &(b[20]), &i);

如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2015-02-04 13:21
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:5 
我定义了数组的长度为20,为什么输出从100--124的元素?

你循环输出了 b[20] 25次啊。。。

基于第一个问题,数组在内存中的地址分配是连续的,我觉得也应该和 i 的值有关,

你的输出是不是这样的?
100
101
102
...
124

三十年河东,三十年河西,莫欺少年穷!
2015-02-04 14:41
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:5 
基础差,编程习惯不好,代码不规范,就不喷你拉。

首先数组定义完,最好也可它初始化,下int b[20] = {0};
为什么要初始化呢,因为在C中,你没给定义的变量初始化,它默认是取垃圾值(就是随便一个值。)
所以你的第一个问题直到为什么了吧。

第二,你第一都没解决,第二个是编译器给你随便赋值,它的规则谁知道啊,
你没准换个编译器,输出的值就不一样,因为你丫的根本就没初始化数组,也没给数组赋值。
所以第二个问题根本就没任何价值。OVER


别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-02-04 20:22
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 5楼 lovegh
你还是不要搞笑了,你这种完全不在鼓上敲的解答会让几个版主高手笑喷的。
他的问题和赋初值没任何关系。20个元素的数组下标是从0到19,根本不存在a[20]元素,非要访问也行,指针就指乱了,他这里是指到变量i上了。

能编个毛线衣吗?
2015-02-04 20:52
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:0 
回复 6楼 wmf2014
对哦,越界了。小菜水平还是不行,装逼下而已,见谅见谅。

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-02-04 21:13
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:0 
我把定义 i 和 b[20]倒了一下
    int b[20];   
    int i;
输出结果就不一样了,看来还是临时变量压栈的顺序问题
我重新改写了下程序

int main(void)
{   
    int b[20] ;   
    int i ;  
    printf("0x%08x---0x%08x \n", &(b[-1]), &i);
    for (i =100 ; i<125 ; ++i)
        printf ("%d \n" , b[-1]);
    return 0 ;
}
输出结果和楼主的一样,下面我画了下栈空间的示意图。

int i;                     int b[20];     
int b[20];                 int i;
栈空间:                   栈空间:
b[0]                        i
b[1]                        b[0]
b[2]                        b[1]
b[3]                        b[2]
b[4]                        b[3]
b[5]                        b[4]
b[6]                        b[5]
b[7]                        b[6]
b[8]                        b[7]
b[9]                        b[8]
b[10]                        b[9]
b[11]                        b[10]
b[12]                        b[11]
b[13]                        b[12]
b[14]                        b[13]
b[15]                        b[14]
b[16]                        b[15]
b[17]                        b[16]
b[18]                        b[17]
b[19]                        b[18]
i                        b[19]

如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2015-02-05 09:55
快速回复:关于一维数组的输出值的问题
数据加载中...
 
   



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

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