华为慧通面试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
...
...代表语句或语句块
请指出以上两种写法的优点和缺点!


第一中方法有在循环次数比较高的情况下有更高的效率。第二中写法代码显得比较简洁。
...全文
560 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 就百分百引起崩溃了

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧