LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: Snoopy

结果怎么不一样了??

[复制链接]
发表于 2003-6-10 15:31:10 | 显示全部楼层
最初由 pinksnoopy 发表
我制造了个makefile后,是用make编译,然后./***的

不知道这会不会影响编译的过程,结果老是不一样也,,,

ain()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
//你应该加入这行
for(i=0;i<10;i++)

printf("%d",a);    <--改成 printf("%d",a);
//你如果只是printf("%d",a);,程式不知道你要显示哪一个内存

}
输出的应该是1,2,3,4,5,6,7,8,9   这是我自己的想法,不是书上的

结果却是,,-1073751808

是不是我操作方面问题不对头啊???
发表于 2003-6-10 19:38:54 | 显示全部楼层
其实也算不上非法使用,如果 printf("%X",a) 这样想要输出 a[] 的地址也是可能的嘛。
C 这样的语言,如果使用者头脑不清楚,就到处犯错误。
发表于 2003-6-10 19:47:56 | 显示全部楼层
楼主好像学过很多种语言啊.好像有见过你问Perl.看你发的贴都上千了.为什么每次都是学了个开头就换了呢?
你的问题真的是太基础了.我觉得如果你真的是想学的话,先学精一门语言比较好.
 楼主| 发表于 2003-6-10 22:27:33 | 显示全部楼层
觉得c不会还是先学c好,,,,决定了就不会改,
发表于 2003-6-11 05:16:50 | 显示全部楼层

小弟初学!:)

main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
//你应该加入这行
for(i=0;i<10;i++)
printf("%d",a); <--改成 printf("%d",a);
//你如果只是printf("%d",a);,程式不知道你要显示哪一个内存
}
输出的应该是1,2,3,4,5,6,7,8,9 这是我自己的想法,不是书上的

结果却是,,-1073751808

问题(1):
这个 -1073751808 是不是代表40002700(16进制)这个地址,这个地址是程序的真实加载地址还是系统封杀后给的随机地址?
问题(2):
是不是linux的应用程序默认加载在40000000这个代码段?
小弟初学,大哥们别笑话!
发表于 2003-6-11 07:59:49 | 显示全部楼层
1。这个好象和硬件平台有关。如果是在32位的机器上,应该输出的是内存地址。
2。linux的内存管理和dos不一样,是分页管理。具体的你可以去看书。
发表于 2003-6-11 09:33:56 | 显示全部楼层
-1073751808 是 0xbfffd900,
自动变量是从堆栈里面分配的,如果你只分配了 a[10],但是没有初始化,
那么a[0]这个变量的内容就是原来某个时候保存在堆栈里的值,很可能是
某个地址,具体是什么地址,鬼知道。
 楼主| 发表于 2003-6-11 11:21:26 | 显示全部楼层
main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
printf ("%d",a);
}
每次运行后结果都不一样的,,,,,,,
发表于 2003-6-11 11:49:17 | 显示全部楼层
哎~~,当然不一样了,要不我怎么说“鬼知道”呢。
发表于 2003-6-11 12:16:29 | 显示全部楼层
以后还是规矩点,不要玩什么花样。该怎么输出就怎么输出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表