首页 > 编程知识 正文

c语言开发笔试题,常见c语言面试题

时间:2023-05-03 18:29:44 阅读:214323 作者:1496

发信人: thebestone (Simple life), 信区: C

标 题: 【合集】中兴面试C语言题

发信站: 饮水思源 (2002年01月20日17:20:51 星期天), 站内信件

☆──────────────────────────────────────☆

assembly (assembly) 于 2001年11月13日11:13:42 星期二 提到:

〖 以下文字转载自 job 讨论区 〗

〖 原文由 jackjun 所发表 〗

发信人: ldldld (流云), 信区: Career

标 题: 中心面试c语言题,我没答出来

发信站: 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下,执行时显示访问内存错误

☆──────────────────────────────────────☆

rabbit (孝顺的鱼) 于 2001年11月13日12:31:27 星期二 提到:

能详细说一下“越界”是怎么回事吗?

☆──────────────────────────────────────☆

helic (大恶人) 于 2001年11月13日13:27:11 星期二 提到:

我在2000下也跑了一遍, 没有问题的说。 不过直接写指针总是不好的啦。改成像

*(p+loop)=loop;会比较规范。

☆──────────────────────────────────────☆

howe (无痕) 于 2001年11月13日13:32:14 星期二 提到:

你没有被录取

这个程序的赋值结果不会符合编程者的原意.

编译后运行会不会出错与编译器极其设置有关.

就算运行不出错,最后p很有可能指向地址0x4.

☆──────────────────────────────────────☆

helic (大恶人) 于 2001年11月13日14:00:09 星期二 提到:

不会指向0x4. 编译器在分配内存给int a[5]的时候不会分配到0, 除非内存不够了。而

p是指向这段内存的。也不会指到0x4去吧。

☆──────────────────────────────────────☆

law (游戏*人生) 于 Tue Nov 13 14:23:54 2001) 提到:

hehe, 有可能是p = 4

也有可能是total = 4;

这要看编译器怎么在栈里放局部变量了。

☆──────────────────────────────────────☆

howe (无痕) 于 2001年11月13日14:26:11 星期二 提到:

loop==4时,对*p的赋值是越界的,但是

如果编译器分配内存时连续分配的话

a[5]就是p, 所以此时*p就是p,也就是说,

此时p指向的就是自己的地址

这时给*p赋值4,就把p指向了0x4

☆──────────────────────────────────────☆

helic (大恶人) 于 2001年11月13日15:30:07 星期二 提到:

不好意思,是我没有看仔细,再看了一遍, 当loop==4时, p指向a[5], 而不是a[4],

这样的程序真令人ft.

☆──────────────────────────────────────☆

victor (victor) 于 2001年11月13日15:35:13 星期二 提到:

谢谢提醒,刚才我也没看明白,以为还在a[4]呢

现在懂了

☆──────────────────────────────────────☆

huaihuai (坏坏◎/◎不要离我太近!) 于 2001年11月13日15:42:06 星期二 提到:

nod.本来我在job板也是这么说的,

后来一位老兄硬是指摘偶的不是,害的我不得不学习了一下cygwin下

gdb的用法,结果发现有时候即使指针指到a[7]也不会出错,

原来是因为cygwin下面的gcc在分配变量内存的时候会按16字节节对齐,

估计其他编译器也可以这样。而且记得好像有#programma语句或者

是编译开关可以关掉节对齐的。那样就……。

☆──────────────────────────────────────☆

robinhan (无情网客) 于 2001年11月13日17:44:48 星期二 提到:

不可能。我试过的可以啊。没错呀。

☆──────────────────────────────────────☆

yuanziying (dhm) 于 2001年11月13日20:13:53 星期二 提到:

恐怕中心面试的人也不会想到那么多。

☆──────────────────────────────────────☆

bgee (★★★★★) 于 2001年11月16日11:20:36 星期五 提到:

当p=a时,表示指针p指向数组a的这一事实。

当loop==4时,p却指向了数组a之外去了。

也许这是C程序最忌讳的事情了吧?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。