打印

C语言一道面试题

[复制链接]
楼主: wxj1952
手机看帖
扫描二维码
随时随地手机跟帖
121
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现场

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

使用特权

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

这个结构体好象不能继承和派生吧...也不能有多态...也没有

就有那么一点封装性而已。

不是想不到,而是想到了,认为不能这样做而已。的确有些编译器不支持这样的语句。

使用特权

评论回复
123
wxj1952|  楼主 | 2008-4-1 10:47 | 只看该作者

恐怕还是没想到。

提示一点:答案可能与结构体赋值没有什么大关系。诸位学长一直在围绕结构体的赋值问题讨论,不过是由HWM学长发起的,用C++封装。然后我说C也行,例如....结果导致一片事后诸葛亮。
还有21楼给出的正确语句,那是无懈可击的。那是一种包含了概念应用的“方法。”(做到这种程度已经通过面试了,但是经理还会多问一句:“结构为什么可以拷贝?而数组却不能?”)

答案应该是根据一个C语言重要概念得出的,诸位一直在讨论“方法”,这方法行不行,那方法也许更好。这种讨论是没有最佳的,

使用特权

评论回复
124
computer00| | 2008-4-1 10:56 | 只看该作者

哎...是我们都没想到,我们是笨蛋...我们都没学过C++...

我们也都不懂强制类型转换...回去面壁去了~~~~~~

使用特权

评论回复
125
sun0_liang| | 2008-4-1 11:27 | 只看该作者

没人吊我!靠!

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

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

EA = EA_BUF;          //恢复EA现场

使用特权

评论回复
126
hall919| | 2008-4-1 12:17 | 只看该作者

那不还是指针吗?

 只不过上面说的没有理解出题者的意思罢了。

使用特权

评论回复
127
zyok| | 2008-4-1 12:35 | 只看该作者

继续,楼高还乘凉。。。

使用特权

评论回复
128
wxj1952|  楼主 | 2008-4-1 13:43 | 只看该作者

谁都自以为最得意之作。结果还是旁观者清。

 我的源代码,够简单吧: 

int a[10],b[10]; 


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

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

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

整整12行“从没有失过手”,十二分把握贴主保证这是最简的!
怎么我一看就不是呢?算不算概念不清?

还有没有这样人?总是以自己十二分正确自居,结果让别人指出自己的明显漏洞之后一下没了底气。其实有什么呢?大男子能屈能伸,一声“对不起”。谁会在意你是谁。就是别自己失了面子,还要狡三分。“那你懂.....吗?”非要抓住别人的辫子才算解恨。我没错!是你的错!你没我懂......
 
 

使用特权

评论回复
129
wxj1952|  楼主 | 2008-4-1 14:28 | 只看该作者

回 85楼 IceAge

“不要把技巧的卖弄当作技术,当作创意更可笑。”

老师说我是技巧那是恭维学生了,我只不过是抄袭了书上的东西。别人早就在用的方法不能算我的卖弄或创意吧。您老大人不知道的问题就以为学生是在卖弄。别人看过的书你没看过,这是您的问题还是别人的问题?我卖弄的所有“技巧”都是书上写的明明白白的黑字,别人用腻了/用惯了的东西。只是您没好好看书不知道、想不到而已。您是不是认为您什么问题都知道?就有资格训导学生这样的话了?要不要我再请教您一个书上早就写明了的概念性问题?

我菜鸟学生一个有什么创意好卖弄?只想了解一下你老师到底桶里有多少水。能不能也来点什么创意性的问题考考我们学生,活跃活跃论坛,让大家长长知识?

学生建议老师细读一下Stephen Prata 写的C教材第391页“结构的其他特性”,第一句讲的是什么?老师大气一点的话最好看完后贴上来,(我打字太累,何况那并不是这道题的答案。)让大家看看是我的创意,还是书上早有的东西,还是我理解错了?还是Stephen Prata 作者比您更可笑?!

使用特权

评论回复
130
sun0_liang| | 2008-4-1 15:21 | 只看该作者

指针 memcpy 库 对象 过程 继承 。。。全上来了 好晕

是不是脑子有点乱  眼有点花,呵呵。
我还是觉得怎么做,实际上落到芯片执行时都是一个一个拷贝的,肯定做不到整体拷贝!除非自己花个你几千万——还得是英镑,自己开发出来一个芯片,一个指令支持多内存对考,然后还得死乞白赖的要人家c支持这个芯片。。。。。。

既然不能整体拷贝,那出题的是什么意思呢?
现有2个类型完全一样的数组A、B,(例如 int a[10],b[10];) 用C/C51如何实现数组A、B之间的整体拷贝(赋值)?即应用下面形式:
          A=B ;
是因为一个一个拷贝会出问题,强调整体拷贝,是不想出那个问题。是什么原因造成一个一个拷贝与整体拷贝执行结果的效果不一致呢?——中断!

知道题的意思,就好办了——我就这么做!

EA_BUF = EA; EA = 0;  //保存EA现场,关中断
for(i=0;i<10;i++)     //A = B;
a=b;
EA = EA_BUF;          //恢复EA现场

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

使用特权

评论回复
131
computer00| | 2008-4-1 16:10 | 只看该作者

如果他们没有在中断中访问,那么中断并不会带来什么影响

使用特权

评论回复
132
HWM| | 2008-4-1 16:41 | 只看该作者

赞133楼的认真

“如果我做考官,如果这份卷总分是100的话,这个题我会定为3分,用数组做得1分,memcpy,的得2分,用结构得3分。”

我增加一条就是,用结构做**秀的得0分。

使用特权

评论回复
133
IceAge| | 2008-4-1 21:08 | 只看该作者

to wxj1952

关于为什么不使用结构强制的原因, 我已经说的很清楚了,不想再重复。结构强制是c/c++ 里基本的概念之一,硬说是什么新的创意,很荒谬。我这里就事论事,不想涉及个人攻击。如果你认为你的方法最好,那么请给出理由。

“不要把技巧的卖弄当作技术,当作创意更可笑。”我之所以说这句话,得确是感到可笑,因为你用所谓的 “创意“ 指责别人。如果你想探讨技巧,我想大家不会有意见,但恼羞成怒的羞辱质问你的人,则落于下乘了。

再说一遍:如果你认为你的方法最好,那么请给出理由。

使用特权

评论回复
134
IceAge| | 2008-4-1 21:18 | 只看该作者

fsaok,赞一个

c51 没有dma 或是block copy, memcpy 结构copy还体现不出多少优势。

如果是考学校学生,或许可以给用结构得3分。但招聘资深软件工程师,memcpy应得3 分,原因我前面已经说明了。

使用特权

评论回复
135
农民讲习所| | 2008-4-1 21:35 | 只看该作者

使用结构直接赋值,马上辞退。

使用特权

评论回复
136
IceAge| | 2008-4-1 21:46 | 只看该作者

另外:wxj1952

如果你想探讨 c/c++ 的技巧,我们最好去 csdn 或 vchelp.net. 最好是探讨 c++ 的技巧, 毕竟c++ 的技巧更多,更复杂。
关于结构copy,对于c++属于基础的概念,几乎每本c++书都会详细的解说copy构造函数以及 operator=。你认为你自己很有创意,只不过这里是 c51 论坛而已,你不妨把你的高论贴到 csdn 上看看。   


vchelp 上有我几年前发的帖子,你可以看一看。用户也是 IceAge.

这里是几个探讨 c++ 的帖子:
http://www.vchelp.net/cndevforum/subject_view.asp?subject_id=86501&forum_id=

http://www.vchelp.net/cndevforum/subject_view.asp?subject_id=27845&forum_id=

http://www.vchelp.net/cndevforum/subject_view.asp?subject_id=27294&forum_id=

使用特权

评论回复
137
msblast| | 2008-4-2 00:12 | 只看该作者

LZ不过闲了想磨牙,还这么多人认真的

使用特权

评论回复
138
sun0_liang| | 2008-4-2 10:41 | 只看该作者

computer00 你把我的根刨了

132楼 computer00 
:如果他们没有在中断中访问,那么中断并不会带来什么影响 

当然要在中断中对数据ab有动作了,不然的话用什么方式都是用“一个一个赋值”的方式来达到“整体赋值”的效果了。

理解很简单 例子8位单片机中

int a,b;
。。。
a = b; 
。。。

算是整体赋值吧,但是假如中断对ab有操作,可能会有问题;

a=b 是分高低字节实现的,假如中断在高低字节赋值指令中间进入,并操作ab的话,a的值可能会差别很大!!!!

我认为这就是题目 整体赋值 的意义所在!

使用特权

评论回复
139
computer00| | 2008-4-2 11:27 | 只看该作者

呵呵,楼主的意思是在语句的写法上,而不是在效果上。

使用特权

评论回复
140
fsaok| | 2008-4-2 13:19 | 只看该作者

俺准备做事后诸葛亮

其实,事后诸葛亮也不是好做,

俺在等待着楼主的答案,然后再做事后诸葛亮,,

使用特权

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

本版积分规则