华为慧通面试c语言题及答案,欢迎斧正

newsunet 2008-12-07 07:57:01
Q1:试题如下,请写出程序运行结果P=____

#include <stdio.h>
main()
{
int *p = (int *)100;
p=p+1;
printf("P=%d\n",p);
}

A1:

int *p = (int *)100;
可能会引起程序崩溃

p=p+1;
对指针加一,而非对指针的指向的变量加1


Q2:指出程序出错并写出正确程序..............

main()
{

}


A2:
main()
{
int p = 100;
p=p+1;
printf("P=%d\n",p);
}

Q3:根据以下给出的程序写一个弹出链表的尾结点数据.

struct NODE
{
int *data;
NOde *Link;
}

strut dlink
{

NODE *head; /*始终指向链表的头结点*/
NODE *teirl; /*始终指向链表的尾结点*/

}

函数
int *poplink(dlink *p)
{


}

A3:

int *poplink(dlink *p)
{

assert(p);
NODE last,prror;
last = p->teirl;
assert(last);
prror = p->head;
assert(prror);
int *result;


if (prror == last)
{
result = last->data;
free(last);
p->head = NULL;
p->last = NULL;
}
else
{
for(;prror->link != last; prror=prror->link);
result = last->data;
free(last);
p->last = prror;
}

return result;
}





//1
if(...)
for(...)
...
else
for(...)
...
//2
for(...)
if(...)
...
else
...
...代表语句或语句块
请指出以上两种写法的优点和缺点!


第一中方法有在循环次数比较高的情况下有更高的效率。第二中写法代码显得比较简洁。
...全文
407 19 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xuegao007 2008-12-11
ls说的对.
  • 打赏
  • 举报
回复
yinghui130 2008-12-11
Q1:试题如下,请写出程序运行结果P=____

#include <stdio.h>
main()
{
int *p = (int *)100;
p=p+1;
printf("P=%d\n",p);
}
在32位编译器中,结果为104,如果用tc结果是102
只是指向了一个内存地址而已,不会崩溃的。如果你去写这个地址到是可能崩溃.
gcc4.2验证
  • 打赏
  • 举报
回复
tianjiao85 2008-12-11

if (prror == last)
{
result = last->data;
free(last);
p->head = NULL;
p->last = NULL;
}
else
{
for(;prror->link != last; prror=prror->link);
result = last->data;
free(last);
p->last = prror;
}

return result;
}


对一个单链表,尾部出列的操作。
这种算法每次都要从头部开始遍历。
  • 打赏
  • 举报
回复
zenny_chen 2008-12-11
嗯。如果这段区域正好在分页机制下被配为即不可读又不可写,那么就会发生访问异常。
  • 打赏
  • 举报
回复
zenny_chen 2008-12-11
嗯。总之,在嵌入式系统上不一定会发生存储器访问异常的啦。除非有MMU以及100这个地址确实没有映射到合法的存储器。100是个不错的数字,它正好可以被4整除,所以对于32位或以下的机器也不会出现地址对齐访问异常。
  • 打赏
  • 举报
回复
matrixcl 2008-12-10
说说1题。

结论很多人都说了,输出104,没有错误。

但4楼给的原因却不敢苟同。你加一行 "*p = 1;"试试.

这里指针指向的位置虽然不合法(或者说不合理), 但是没有指向的内存,所以没有出错
  • 打赏
  • 举报
回复
wdchxzh 2008-12-10

Q2:指出程序出错并写出正确程序..............
Q2:
main()
{

}


A2:
main()
{
int p = 100;
p=p+1;
printf("P=%d\n",p);
}

没有返回值默认是int ,so
  • 打赏
  • 举报
回复
xtting_8984313 2008-12-09
Q1:试题如下,请写出程序运行结果P=____

#include <stdio.h>
main()
{
int *p = (int *)100; //p作为int指针,指向100的内存
p=p+1; //int指针+1,指向下一个int内存区
printf("P=%d\n",p); //100+sizeof(int) 通常为104
}
  • 打赏
  • 举报
回复
ucihqtep 2008-12-09
好东西,进来好好 学习一下
  • 打赏
  • 举报
回复
MagiSu 2008-12-08
1 mei you wen ti

shu chu yi ge di zhi er yi
  • 打赏
  • 举报
回复
hyyuanqiang 2008-12-07
现在 还有华为慧通????????????
不是没有了吗
  • 打赏
  • 举报
回复
czbever 2008-12-07
没什么好说的 lz
  • 打赏
  • 举报
回复
e_sharp 2008-12-07
又见华为
  • 打赏
  • 举报
回复
hhyttppd 2008-12-07
楼主的记忆力不太好。
  • 打赏
  • 举报
回复
newsunet 2008-12-07
[Quote=引用 2 楼 dalixux 的回复:]
A1:

int  *p  =  (int  *)100;
可能会引起程序崩溃

为什么会引起程序崩溃?
如果这都会引起崩溃
那么 int *p = NULL  就百分百引起崩溃了


[/Quote]

当然,这条语句不能引起崩溃,但是当操作P指针指向的内容时,就不一定了。

我没有解释清楚,感谢老兄
  • 打赏
  • 举报
回复
dalixux 2008-12-07
[Quote=引用 3 楼 Zhou_Andy 的回复:]


引用 2 楼 dalixux 的回复:

A1:
 
        int  *p  =  (int  *)100; 
可能会引起程序崩溃

为什么会引起程序崩溃?
如果这都会引起崩溃
那么 int *p = NULL  就百分百引起崩溃了


事实上,程序编译不会发生错误!!!
P指向的地方,按道理讲,应该是存放操作系统内核的地方
[/Quote]

只要不对 p进行解引用 就不会有异常 指针赋值赋多少都没问题 只要在解引用是 指针值是正确可访问的就行
第一题很明显根本没有对指针解引用
  • 打赏
  • 举报
回复
Qlaiaqu 2008-12-07
事实上,程序编译不会发生错误!!!
P指向的地方,按道理讲,应该是存放操作系统内核的地方
、、、、、、、、、、、、、
运行时崩溃而已,此处的100不是物理上的100,而是逻辑上的一百,逻辑上的每个程序所拥有的4g的内存空间中的一百,
当然不是存放操作系统内核的地方,而是系统操作的数据保存的地方。
编译肯定不会错,一无语法错误,二无词法错误。
  • 打赏
  • 举报
回复
jackey_option 2008-12-07


[Quote=引用 2 楼 dalixux 的回复:]
A1:

int *p = (int *)100;
可能会引起程序崩溃

为什么会引起程序崩溃?
如果这都会引起崩溃
那么 int *p = NULL 就百分百引起崩溃了
[/Quote]

事实上,程序编译不会发生错误!!!
P指向的地方,按道理讲,应该是存放操作系统内核的地方
  • 打赏
  • 举报
回复
dalixux 2008-12-07
A1:

int *p = (int *)100;
可能会引起程序崩溃

为什么会引起程序崩溃?
如果这都会引起崩溃
那么 int *p = NULL 就百分百引起崩溃了

  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.6w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-12-07 07:57
社区公告
暂无公告