荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: bakey (sbb的猪), 信区: Program
标  题: [合集]经常来潜水,觉得冷清,发起每日一问(C语言)
发信站: 荔园晨风BBS站 (2005年11月29日16:12:28 星期二), 站内信件

☆   1  ──────────── 我是分割线 ─────────────────☆
发信人: puppygao (SHUBER), 信区: Program
标  题: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: Sat Nov 26 20:50:40 2005

以下代码的输出结果是什么?
[code]void main()
{
   int array[5],i *p;
   for(i=0;i<5;i++)
   {
      array [i] = i
   }
   p = array;
   printf("%d\n",*(p+3*sizeof(int)));
}[/code]

2分钟给不出答案的可以去测试一下:)

--

※ 来源:.荔园晨风BBS站 http://bbs.szu.edu.cn [FROM: 202.105.152.210]

※ 修改:.puppygao 於 Nov 26 21:08:12 2005 修改本文.[FROM: 202.105.152.210]
※ 修改:.puppygao 於 Nov 26 21:13:01 2005 修改本文.[FROM: 202.105.152.210]

☆   2  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (sbb的猪), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: 2005年11月26日21:16:24 星期六

ft,还以为是什么高深的语法...



☆   3  ──────────── 我是分割线 ─────────────────☆
发信人: puppygao (SHUBER), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: Sat Nov 26 21:22:09 2005

慢慢来嘛,不积跬步,无以至千里。




☆   4  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (sbb的猪), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: 2005年11月26日21:33:40 星期六

这个程序没什么特别啊...



☆   5  ──────────── 我是分割线 ─────────────────☆
发信人: huhaiming (一生只爱她), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: 2005年11月26日21:58:42 星期六


编译错误




☆   6  ──────────── 我是分割线 ─────────────────☆
发信人: John (处女座的男人), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: 2005年11月26日22:32:50 星期六



   结果等于多少?4?




☆   7  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: Sat Nov 26 23:28:24 2005

Turbo C 2.0得到285
Turbo C ++ 3.0得到344
Dev C++ 得到1
VC++ 6.0得到2147299328

几位大佬能解释一下吗?



--
meteor
梦想农庄音乐站
http://192.168.117.111
音乐模式:http://192.168.117.111/music.htm
星动BT站(每天更新哦)
http://192.168.117.111/plus_bt.asp

※ 来源:.荔园晨风BBS站 http://bbs.szu.edu.cn [FROM: 192.168.117.111]

※ 修改:.bso 於 Nov 26 23:38:24 2005 修改本文.[FROM: 192.168.117.111]

☆   8  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (sbb的猪), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: 2005年11月27日21:40:34 星期天

我感觉就是一个随机的数,指针不知道指到哪里去了



☆   9  ──────────── 我是分割线 ─────────────────☆
发信人: huhaiming (一生只爱她), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: 2005年11月28日12:49:50 星期一


jjk,我授权你解释一下




☆  10  ──────────── 我是分割线 ─────────────────☆
发信人: jjksam (VOIP engineer), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: 2005年11月28日13:04:37 星期一

好,因为是你的rpwt




☆  11  ──────────── 我是分割线 ─────────────────☆
发信人: jjksam (VOIP engineer), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: 2005年11月28日13:06:26 星期一

你的是什么程序...编译不了.

程序中数组越界,值不能确定.
C语言是不会检查数组和指针的边界的.




☆  12  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (sbb的猪), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: 2005年11月28日14:41:11 星期一

^_^



☆  13  ──────────── 我是分割线 ─────────────────☆
发信人: blackhawk (blackhawk), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: Mon Nov 28 16:45:24 2005

如果我没弄错的话,你的本意是访问array的第四个整数?那结果本来应该是3
但是为什么不对呢?且在不同的编译器中值也不同?
原因在于你没弄清楚p是什么类型的指针?p是int型的,所以p+3*sizeof(int)在32位编译器
中,是指向p后面第12个整数(注意!!!),那么在vc里面,*p=*(array+偏移48个字节)+
(*(array+偏移49))*256+
(*(array+偏移50个)*256*256+(*(array+偏移51)*256*256*256
ps:一般通常的编译器是低地址放低字节,高放高。
所以问题就清楚了,你现在得到的这个值是随机数。
第二个问题:为什么得到的值不同?
这是因为不同的编译器对int的解释是不一样的,16位的是2个字节,32位的是4个字节,和l
ong是一致的。
我手头没有tc等等,只有vc.就vc解释下值为什么是那么大,这是因为指针指向的数据
值是随机数,而int 是
-2147483648~2147483647,所以。。。。。

可编译的代码:
#include <stdio.h>
void main()
{
   int array[5],i, *p;
   for(i=0;i<5;i++)
   {
       array [i] = i ;
   }
   p = array;
   printf("%d\n",*(p+3*sizeof(int)));
   p=NULL;
 }



--

※ 来源:.荔园晨风BBS站 http://bbs.szu.edu.cn [FROM: 192.168.100.226]

※ 修改:.blackhawk 於 Nov 28 16:53:33 2005 修改本文.[FROM: 192.168.100.226]

☆  14  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (sbb的猪), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: 2005年11月28日17:49:36 星期一

对喔,tc的int是16位的



☆  15  ──────────── 我是分割线 ─────────────────☆
发信人: FineBoy (FineBoy), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: 2005年11月29日08:41:48 星期二

编译应该没错,运行错误。


☆  16  ──────────── 我是分割线 ─────────────────☆
发信人: FineBoy (FineBoy), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: 2005年11月29日08:48:18 星期二



注意!!!数组从零开始,所以这里是第13个整数!!



☆  17  ──────────── 我是分割线 ─────────────────☆
发信人: blackhawk (blackhawk), 信区: Program
标  题: Re: 经常来潜水,觉得冷清,发起每日一问(C语言)
时  间: Tue Nov 29 12:32:21 2005

我说的是p后面第12个整数。
[color=blue]: 注意!!!数组从零开始,所以这里是第13个整数!![/color]

--

※ 来源:.荔园晨风BBS站 http://bbs.szu.edu.cn [FROM: 192.168.100.226]

※ 修改:.blackhawk 於 Nov 29 12:47:41 2005 修改本文.[FROM: 192.168.100.226]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店