| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 523 人关注过本帖
标题:二个有意思的C调试现象
取消只看楼主 加入收藏
z_j_j_1
Rank: 4
等 级:业余侠客
威 望:1
帖 子:62
专家分:213
注 册:2015-4-4
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:2 
二个有意思的C调试现象

二个有意思的C调试现象


二个有意思的C调试现象:
(1)
eg1:
#include<stdio.h>
intmain(int argc,char *argv[])
{
chara[100];
printf("a[0]value is:%d\n",a[0]);
}
此时a[0]输出的是随机的整形数。
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ gcc -g -o eg1.debug eg1.c
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ ./eg1.debug
a[0]value is:12
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ ./eg1.debug
a[0]value is:-116
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ ./eg.debug
bash: ./eg.debug: 没有那个文件或目录
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ ./eg1.debug
a[0]value is:28
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ ./eg1.debug
a[0]value is:-4
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$

Eg2:
#include<stdio.h>
intmain(int argc,char *argv[])
{
inta[100];
printf("a[0]value is:%d\n",a[0]);
}
此时a[0]输出的是0。
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ gcc -g -o eg2.debug eg2.c
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ ./eg2.debug
a[0]value is:0
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ ./eg2.debug
a[0]value is:0

eg3:
#include<stdio.h>
intmain(int argc,char *argv[])
{
inta[100];
printf("a[1]value is:%d\n",a[1]);
}
此时a[1]输出的是随机的整形数。
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ gcc -g -o eg3.debug eg3.c
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ ls
eg1.c eg1.debug eg2.c~ eg3.c eg3.debug
eg1.c~ eg2.c eg2.debug eg3.c~ 二个有意思的C调试现象.doc
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ ./eg3.debug
a[0]value is:0
a[1]value is:-1217104564
a[2]value is:-1217071780
a[5]value is:-1217207588
a[99]value is:-1074396132
k40af@K40AF:~/EasyARM-iMX283/Chapter8/二个有意思的C调试现象$ ./eg3.debug
a[0]value is:0
a[1]value is:-1216953012
a[2]value is:-1216920228
a[5]value is:-1217056036
a[99]value is:-1073821428


注:eg1-eg3代码是在ubuntugcc下编译 调试的。
分析:在ubuntu gcc环境下 数组 char a[100]  没有初始化的时候 a[0]-a[99] 输出均为随机数;
          在ubuntu gcc环境下 数组 int a[100]  没有初始化的时候 a[0] 输出均为0 a[1]-a[99]输出均为随机数;
         这是什么原因呢?难道你真的认为这是编译器没有考虑到相关情况吗?
如果你觉得不是可以和我一起来验证哦!-----凌晨
(2)
#include<stdio.h>
int main(int argc,char *argv[])
{
    int j = 10;
    long int tmp = 0;
    tmp = (long int)(&j);
    printf("variable j address:%ld\n",tmp);
}
在ubuntu gcc环境下 此时计算机为变量j分配的存储地址输出是负数:variable j address:-1081997500。那么问题来了:你造原因吗?

搜索更多相关主题的帖子: include 
2015-04-04 17:03
z_j_j_1
Rank: 4
等 级:业余侠客
威 望:1
帖 子:62
专家分:213
注 册:2015-4-4
收藏
得分:0 
回复 3楼 zklhp
对不起贴的确实有点慢,表大神包涵.
关于本贴 现在没有讨论未初始化的值,而是探讨ubuntu对不同的数据类型未初始化的值的不同处理方式。
你知道为什么这样处理吗?难道你真的以为是编译器随机的吗?
2015-04-06 10:12
z_j_j_1
Rank: 4
等 级:业余侠客
威 望:1
帖 子:62
专家分:213
注 册:2015-4-4
收藏
得分:0 
回复 5楼 zhou78yang
理解了,谢谢哈!
2015-04-07 08:17
快速回复:二个有意思的C调试现象
数据加载中...
 
   



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

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