打印

C语言一道面试题

[复制链接]
楼主: wxj1952
手机看帖
扫描二维码
随时随地手机跟帖
101
日谈天方| | 2008-3-28 19:15 | 只看该作者 回帖奖励 |倒序浏览

厉害

云里雾里,多学习啊

使用特权

评论回复
102
jessemok| | 2008-3-29 08:24 | 只看该作者

长见识了

爬到100多楼,印象最深的是第一次听到有人说C语言是处理对像的...长见识了

使用特权

评论回复
103
将军令| | 2008-3-29 09:05 | 只看该作者

我的源代码,够简单吧:

int a[10],b[10]; 


int len=sizeof(a);
memcpy(&b[0],&a[0],len);

或者这样更简单:
memcpy(&b[0],&a[0],len=sizeof(a););

俺经常这样在内存里面拷贝数据,从没有失手。。。。。。。。。。。
俺经常这样在内存里面拷贝数据,从没有失手。。。。。。。。。。。
俺经常这样在内存里面拷贝数据,从没有失手。。。。。。。。。。。
俺经常这样在内存里面拷贝数据,从没有失手。。。。。。。。。。。
俺经常这样在内存里面拷贝数据,从没有失手。。。。。。。。。。。
俺经常这样在内存里面拷贝数据,从没有失手。。。。。。。。。。。
俺经常这样在内存里面拷贝数据,从没有失手。。。。。。。。。。。
俺经常这样在内存里面拷贝数据,从没有失手。。。。。。。。。。。
俺经常这样在内存里面拷贝数据,从没有失手。。。。。。。。。。。
俺经常这样在内存里面拷贝数据,从没有失手。。。。。。。。。。。
俺经常这样在内存里面拷贝数据,从没有失手。。。。。。。。。。。
俺经常这样在内存里面拷贝数据,从没有失手。。。。。。。。。。。


使用特权

评论回复
104
将军令| | 2008-3-29 09:15 | 只看该作者

不要动不动就提什么面向对象,C51里面没有对象!!!

使用特权

评论回复
105
li_mu| | 2008-3-29 10:11 | 只看该作者

如果不介意原来数据丢失

指针直接把此地址指为彼地址
这是最彻底的整体拷贝(应该叫整体移动),而且速度最快
因为数据压根没动,只是名字从A到B
否则肯定是串行的,不可能整体移动或拷贝

使用特权

评论回复
106
农民讲习所| | 2008-3-29 10:13 | 只看该作者

wxj1952喜欢把偏门的技巧当作高人一等的技术。

使用特权

评论回复
107
waha| | 2008-3-29 20:30 | 只看该作者

把这么多高手都给招来了,说明这题还是有点意思的

以前见过的高手跑出来不少:yewuyi、IceAge、所长、fsaok。。。

虽然C99支持结构体直接赋值,但实现机理和memcpy之流一样,具体实现方法和效率都依赖于具体的硬件和编译器。它的主要作用是编程上的方便性。拿这样的题目面试招人,最多只能考察下面试者的知识面,起不到选拔的作用。

总之一句话,产品是踏踏实实做出来的!

使用特权

评论回复
108
z_no1| | 2008-3-29 20:48 | 只看该作者

也不一定是一条指令一个字节的送,

现在有的片子有DMA啊。

使用特权

评论回复
109
yiyu| | 2008-3-29 22:29 | 只看该作者

很复杂的问题

这个问题很讨厌,我曾研究过,用keil C 终究到不到汇编的效果,假设是idata型,只要使用for(s=s,d=b,i=BUFLEN;i!=0;i--,s++,b++),s和d就不能保存到r0,r1中,而直接使用for(i=0;i<10;i++) a=b;  编译器到自动使用r0,r1做指针,并增量,但i又不能使用djnz 指令, c51是大端方式,且8位机不存在对齐方式,但直接使用mcmcpy还是太复杂,不如直接写的效率高。反正不管怎样,不出错就好,谁也不指望提高这点效率就能让51去做数据处理。

使用特权

评论回复
110
cheng1236| | 2008-3-30 19:30 | 只看该作者

答案

  C里没有整体赋值的吧!

使用特权

评论回复
111
cheng1236| | 2008-3-30 19:34 | 只看该作者

回复

 C语言居然还有这个memcpy()函数,**,老朽落后了!!

使用特权

评论回复
112
heloo| | 2008-3-30 19:52 | 只看该作者

哈哈,顶楼上的,不是C函数库里才有的吗?C语言只是语言而已,呵呵!!

使用特权

评论回复
113
niu9911| | 2008-3-30 21:55 | 只看该作者

学习学习再学习!

使用特权

评论回复
114
sjh_ily| | 2008-3-31 13:19 | 只看该作者

五百元

都是高手啊!!!
小弟自愧不如啊!!!

使用特权

评论回复
115
pcdian| | 2008-3-31 19:51 | 只看该作者

解放思想,事实求是!

   毛泽东理论的精髓,**理论的精髓!

使用特权

评论回复
116
sordyz| | 2008-3-31 21:18 | 只看该作者

看不明白

使用特权

评论回复
117
wlsui| | 2008-3-31 21:57 | 只看该作者

(char *)a = (char *)b;

刚看到这题的时候就觉得答案应该是这样,后来看到17楼的提示,更觉得楼主的答案应该这样

使用特权

评论回复
118
wlsui| | 2008-3-31 22:04 | 只看该作者

看了下前面各位回复,有的也是这种答案,

不过这种写法有BUG,有很大的隐患,而且效率不一定高
有memcpy()这种专门经过优化的函数为什么不用,而要搞这种可读性差,又有很大隐患的代码呢?
竟然还有公司将这种题做压轴题,真搞不懂怎么想的

使用特权

评论回复
119
wxj1952|  楼主 | 2008-4-1 09:34 | 只看该作者

不是做不到,而是想不到。

回105楼 将军令:
memcpy(&b[0],&a[0],len);
肯定是从不失手的写法;应该说这是老师最得意之笔。

但是我说从这种写法上看就知道老师C语言概念不清。谁仔细看都能看出来,可惜就是没“仔细认真看”。且作为是最佳写法沿用了N年。


等想清楚了以后,再看下面这句话:

“不要动不动就提什么面向对象,C51里面没有对象!!!”

有没有可能同样也会被人抓住漏洞,结果是自己概念不清?

在自己没有清晰确定概念之前,就别“教导”别人,“不要这,不要那。”现在大学里这样的“粗糙”老师太多了。问什么不知道什么。不问的全知道。

   我非常盼望请将军令老师为我们给“对象”下个清晰的定义。抄抄书上的也行。要注明出处。

使用特权

评论回复
120
sun0_liang| | 2008-4-1 09:48 | 只看该作者

我的想法是这样的,和大家说说!

大家考虑的好多,呵呵,不过和题目有关系么????下面是我的认识:

为什么强调整体拷贝,是有原因造成与整体拷贝的效果不一致,什么原因呢!!!!——只有中断!

我这么做!

EA_BUF = EA; EA = 0;  //保存EA现场,关中断

for(i=0;i<10;i++)     //A = B;
a=b;

EA = EA_BUF;          //恢复EA现场

结束!
大家看看!有意见提!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则