中兴笔试c语言,中兴面试C语言题1
發(fā)信人: thebestone (Simple life), 信區(qū): C
標 題: 【合集】中興面試C語言題
發(fā)信站: 飲水思源 (2002年01月20日17:20:51 星期天), 站內(nèi)信件
☆──────────────────────────────────────☆
assembly (assembly) 于 2001年11月13日11:13:42 星期二 提到:
〖 以下文字轉(zhuǎn)載自 job 討論區(qū) 〗
〖 原文由 jackjun 所發(fā)表 〗
發(fā)信人: ldldld (流云), 信區(qū): Career
標 題: 中心面試c語言題,我沒答出來
發(fā)信站: BBS 水木清華站 (Mon Nov 12 15:38:17 2001)
請問下面程序是否有錯
int loop;
int a[5],*p;
void main()
{
p=a;
for(loop=0;loop<5;loop++)
{
p++;
*p=loop;
}
}
☆──────────────────────────────────────☆
thinker (thinker) 于 2001年11月13日11:16:15 星期二 提到:
loop==4 時候越界
☆──────────────────────────────────────☆
legendcorba (legendcobra) 于 2001年11月13日11:24:27 星期二 提到:
嚴格說來,也沒有錯呀。
☆──────────────────────────────────────☆
assembly (assembly) 于 2001年11月13日11:29:58 星期二 提到:
試了一下
freebsd4.3 loop>=2667出錯
mandrake 8.0 loop>=624出錯
debian 2.2.19 loop>=627出錯
win2000 msvc6 loop>=5出錯
似乎m$的檢查更嚴格
☆──────────────────────────────────────☆
assembly (assembly) 于 2001年11月13日11:32:49 星期二 提到:
win2000下,執(zhí)行時顯示訪問內(nèi)存錯誤
☆──────────────────────────────────────☆
rabbit (Victor) 于 2001年11月13日12:31:27 星期二 提到:
能詳細說一下“越界”是怎么回事嗎?
☆──────────────────────────────────────☆
helic (大惡人) 于 2001年11月13日13:27:11 星期二 提到:
我在2000下也跑了一遍, 沒有問題的說。 不過直接寫指針總是不好的啦。改成像
*(p+loop)=loop;會比較規(guī)范。
☆──────────────────────────────────────☆
howe (無痕) 于 2001年11月13日13:32:14 星期二 提到:
你沒有被錄取
這個程序的賦值結(jié)果不會符合編程者的原意.
編譯后運行會不會出錯與編譯器極其設(shè)置有關(guān).
就算運行不出錯,最后p很有可能指向地址0x4.
☆──────────────────────────────────────☆
helic (大惡人) 于 2001年11月13日14:00:09 星期二 提到:
不會指向0x4. 編譯器在分配內(nèi)存給int a[5]的時候不會分配到0, 除非內(nèi)存不夠了。而
p是指向這段內(nèi)存的。也不會指到0x4去吧。
☆──────────────────────────────────────☆
law (游戲*人生) 于 Tue Nov 13 14:23:54 2001) 提到:
hehe, 有可能是p = 4
也有可能是total = 4;
這要看編譯器怎么在棧里放局部變量了。
☆──────────────────────────────────────☆
howe (無痕) 于 2001年11月13日14:26:11 星期二 提到:
loop==4時,對*p的賦值是越界的,但是
如果編譯器分配內(nèi)存時連續(xù)分配的話
a[5]就是p, 所以此時*p就是p,也就是說,
此時p指向的就是自己的地址
這時給*p賦值4,就把p指向了0x4
☆──────────────────────────────────────☆
helic (大惡人) 于 2001年11月13日15:30:07 星期二 提到:
不好意思,是我沒有看仔細,再看了一遍, 當(dāng)loop==4時, p指向a[5], 而不是a[4],
這樣的程序真令人ft.
☆──────────────────────────────────────☆
victor (victor) 于 2001年11月13日15:35:13 星期二 提到:
哦
謝謝提醒,剛才我也沒看明白,以為還在a[4]呢
現(xiàn)在懂了
☆──────────────────────────────────────☆
huaihuai (壞壞◎/\◎不要離我太近!) 于 2001年11月13日15:42:06 星期二 提到:
nod.本來我在job板也是這么說的,
后來一位老兄硬是指摘偶的不是,害的我不得不學(xué)習(xí)了一下cygwin下
gdb的用法,結(jié)果發(fā)現(xiàn)有時候即使指針指到a[7]也不會出錯,
原來是因為cygwin下面的gcc在分配變量內(nèi)存的時候會按16字節(jié)節(jié)對齊,
估計其他編譯器也可以這樣。而且記得好像有#programma語句或者
是編譯開關(guān)可以關(guān)掉節(jié)對齊的。那樣就……。
☆──────────────────────────────────────☆
robinhan (無情網(wǎng)客) 于 2001年11月13日17:44:48 星期二 提到:
不可能。我試過的可以啊。沒錯呀。
☆──────────────────────────────────────☆
yuanziying (小元) 于 2001年11月13日20:13:53 星期二 提到:
恐怕中心面試的人也不會想到那么多。
☆──────────────────────────────────────☆
bgee (★★★★★) 于 2001年11月16日11:20:36 星期五 提到:
當(dāng)p=a時,表示指針p指向數(shù)組a的這一事實。
當(dāng)loop==4時,p卻指向了數(shù)組a之外去了。
也許這是C程序最忌諱的事情了吧?
總結(jié)
以上是生活随笔為你收集整理的中兴笔试c语言,中兴面试C语言题1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 开发经验 - 转载
- 下一篇: 【转】让你的手机成为你的电脑摄像头