打印

C语言一道面试题

[复制链接]
楼主: wxj1952
手机看帖
扫描二维码
随时随地手机跟帖
61
mohanwei| | 2008-3-22 15:30 | 只看该作者 回帖奖励 |倒序浏览

看看c++对象的实现代码就知道了……

CString a="jaskfdjalskfj;alksjfd;lkajsdflkjaslkdfj;aslkfjd;l",b;
b=a;

很简单么?跟踪到里面看看……转得你头晕脑涨之后,才发现,最终实现起来还是
for(i=0;i<strlen(……),i++)
{
   ……
}

目前得计算机体系里没有“整体赋值”这种东西存在

使用特权

评论回复
62
李冬发| | 2008-3-22 18:28 | 只看该作者

结构的整体赋值标准C里实现不了的!

你的编译器是以C++的语法来编译的了。

使用特权

评论回复
63
wxj1952|  楼主 | 2008-3-22 21:49 | 只看该作者

诸位学长

参考文献 :
1、清华大学计算机专业教材 Andrew S.Tanenbaum的《计算机网络》第三版 第三章,C语言结构的赋值用法。(这类教材不可能用C++写例程)

注意到清华乃至全国大学计算机专业以前采用的都是国内某一知名教授A写的教材,印了几千万册,可知教授赚了不少钱。
自从各学校改用世界著名计算机教材之后,书店里再也看不到A教授写的教材。两本教材我都研读过了,天上地下之差别。显然A教授的书都是抄来的内容,漏洞百出。自己都没看懂,却要写到教材上误人子弟。

2、《时间触发嵌入式系统设计模式》——使用8051系列微控制器开发可靠应用 Michael J.Pont 怎样用C51实现封装。

3、《C陷阱与缺陷》——“结构数组的写法”
(数组元素可以用“=”赋值,这一点没有疑问,那么当数组元素为“结构”时,怎么赋值读写?用for( ){ }?!

4、《C++ Primer Plus》第五版 第10章P306。C++的类对象可以互相赋予,对照的是C中的类型变量 int,char,struct,“尽可能相同的使用”体现在哪里?

如果一帧数据是一幅图像,程序上按字节处理?即使DMA已经到了链路层。

2楼写的是简单,关键是招聘有些故意刁难。一个公司要招一个程序员,结果来了20个甚至50个人应聘,50个人都是2楼的写法,录取谁?有句话说“2个笔试才能完全一样的应聘者,最后录取的是相貌好的那个。”程序员也要相貌了。

使用特权

评论回复
64
李冬发| | 2008-3-23 00:16 | 只看该作者

看来是跟不上趟了

原来使用宝兰的C编译,使用结构赋值明确提示编译错误!

可没太在意1994和1999年还是对传统C引进了C++的语法。其中包括单行注释和结构赋值。

使用特权

评论回复
65
taoest| | 2008-3-23 01:31 | 只看该作者

低级问题

别老在这些低级问题上兜圈子。
现在的CPU越来越快,何苦呢。
人要将有限的精力放在最有需要的领域。老在低级问题上兜,没有出头的一天。

使用特权

评论回复
66
wxj1952|  楼主 | 2008-3-23 09:10 | 只看该作者

这不是追求谁快谁慢的问题

要是连C语言按值传递和按引用传递的基本概念都没搞清,还研究什么高级课题。

看来中国为什么没有自己的FB、OS,就是缺少taoest这样高级领域的研究人才。

连ANSI C 改进的问题都成了低级问题,taoest 应该申请到ANSI去工作,在中国只能画画电路板什么的,屈才了。

能不能继续请教taoest 几个低级问题?虽然菜鸟,但是博士生不会拒绝本科生的求教吧。


使用特权

评论回复
67
onemillion| | 2008-3-23 09:55 | 只看该作者

fsaok yewuyi 说的很实在

  做项目讲求的功能实现,CPU运行程序只认识0,1,它会管你是用什么写的? 

  A=B 如果要讲求速度,那就嵌入汇编,而且是根据具体处理器型号使用特定的精简汇编指令,
      如果要讲求维护,用2楼的最好 .

使用特权

评论回复
68
computer00| | 2008-3-23 10:10 | 只看该作者

这个问题不算什么编程思路方面的

因为很多人学的都是以前的老标准,所以都是认为结构体之间不可以直接赋值的。

如果知道这个特性,强制类型转换这个东西一般的程序员都会。

使用特权

评论回复
69
HWM| | 2008-3-23 12:31 | 只看该作者

楼主:闭嘴,别在这里大谈C/C++。

结构在C中只是个“小娘养的”,它在C里原本就没有做类型的资格,非得要加个typedef才能登堂入室。只是在C++中才沾了类的光给转正了。

结构和对象的赋值复制确实有相当多的好处,但要注意合理封装。如果封装漏了馅,甚至都没有封装的**秀,实在不敢恭维。让我看来连那出题的都该给fire了。

使用特权

评论回复
70
wxj1952|  楼主 | 2008-3-23 16:11 | 只看该作者

既然你学过Pascal

HWM 哪里来那么大火气,你总不能硬把别人编译通过的、得到正确结果的程序说成是没有道理的吧。
    21楼的程序没错!

   咱们这样自学C的人总不会瞪着眼睛说ANSI C/K&R C的解释不合理吧?请看完《实用C语言详解》再来发火:

P4“按值传递参数”    与Pascal等语言不同,在C语言中决定参数传递方式的因素不是参数说明形式,而是参数的类型。以下类型的参数所对应的变元只能通过按值传递方式传递给被调用函数:
(不用我解释这里什么叫按值传递方式吧。与其对应的是按引用方式传递。什么样的类型能够按值传递?什么样的类型“只能”按引用方式传递?能详细给我讲讲么?)
* 整数类型
* 字符/浮点/枚举/指针/联合 类型
* 结构类型 -----------(结构是什么娘养的类型?)

结构“是小娘养的,它在C里原本就没有做类型的资格,非得要加个typedef才能登堂入室。只是在C++中才沾了类的光给转正了。”?    
    请教学长,对照
      char A,B;     // A,B定义为char变量
 有   struct {int a[10]}A,B;      // A、B算不算结构类型变量?它通过typedef 小娘说明了吗?它们不能登堂入室?
(我还真不知道从哪一年开始以前不允许这样写。又从那一年开始转正可以了。)

别把typedef struct{int a[10]}A,B; 和 struct{int a[10]}A,B;  两者搞混了。意思完全不同,相差甚远。 

注意这是1994年 ANSI C语言《C详解》,你一定要跟我谈1994年甚至1986年以前的什么什么来堵我的嘴,有失学长风范了吧。      


使用特权

评论回复
71
HWM| | 2008-3-23 17:05 | 只看该作者

你这小子,叫你闭嘴还不闭嘴。

仔细看一下21楼那玩意儿能过编译吗?
不用typedef能给struct定义一个类型名吗(在C中)?

使用特权

评论回复
72
wxj1952|  楼主 | 2008-3-23 18:24 | 只看该作者

弄不懂了

struct name_AB{int a[10];}A={0x01,0x02,0x03},B;

     B=A;  //我为什么一定要用typedef?
 
A、B是不是 name_AB结构类型变量? name_AB算不算我定义的结构类型名?你一定要说这不算,必须要 struct  name_AB 才行,那我就认输好了。(在C中,任何使用typedef 的地方,都可以不用。问:我说的对不对?)21楼的程序编译通不过,是他打字错误。概念是对的。这也要追究吗?

那我把21楼的程序更正后贴上来?差个字母,差个符号,就说是C 不行?这什么逻辑。21楼的程序我用 C51都通过了,(别说C了)无论Keil/Franklin。

typedef 是C++来的?是C的用一下不行?

使用特权

评论回复
73
wxj1952|  楼主 | 2008-3-23 18:55 | 只看该作者

概念错误:

typedef 并不能定义类型,它不过是为了一个“已经存在的类型”创建一个名字!(它在某些地方相似于#defind ,是有用的。不用死不了的。)

再看《C Primer Plus》第五版 P380 
name_AB结构的声明“创建”了一个名为struct name_AB的“新类型”。

所有都和C++无关。

使用特权

评论回复
74
HWM| | 2008-3-23 20:33 | 只看该作者

楼主:怎么还不开窍?试一下下面的定义C中能行得通吗?


struct name_AB
{
    int a[10];
};

name_AB A;

咳,懒得再理你。

使用特权

评论回复
75
李冬发| | 2008-3-24 03:11 | 只看该作者

从Standard C99里看来name_AB A;是行不通的

通过GCC的验证:

struct name_AB
{
    int a[10];
};

name_AB A;

编译是通不过的。看来C99并没有把C++的这一语法引进!

使用特权

评论回复
76
wxj1952|  楼主 | 2008-3-24 08:33 | 只看该作者

我吃饱了撑的。跟76楼胡搅。我不会用typedef?

“name_AB算不算结构类型名?你一定要说这不算,必须要 struct  name_AB 才行,那我就认输好了。”

C++是C的扩充,拿个升级版本的东西来贬初级版,拿个Class 跟Struct来比较,这也是辩论?

typedef  struct {
    int a[10];
}name_AB;

name_AB A={0x01,0x02,0x03,0x04},B;   //我用struct了吗?

         B=A;

我的程序用赋值语句实现了,编译通过了。你愿意用C++10条20条你就用。还非要争个输赢。

自学C/C ++没看过《C Primer Plus》《C++ Primer Plus》?
要不要我再给你抄两段概念。你自己看看Struct name_AB 和name_AB 怎么发展来的。

“typedef 并不能创建新类型,它不过是为了一个“已经存在的类型”创建一个名字。”

总好像以为typedef就是type-类型,def-定义。
typedef  struct {
    int a[10];
}name_AB;

不过是用名字 name_AB 来标识 struct { int a[10];};这种类型的结构。这个结构类型不是typedef “创建”的。是用户由struct构造的。




使用特权

评论回复
77
dsz| | 2008-3-24 11:36 | 只看该作者

真正天天做项目的人都会同意fsaok

真正天天做项目的人都会同意fsaok
C语言最大的特点就是
当公司有人走了以后
会有好多人能替代他的空缺,不至于天天面对着汇编,同时也为了在项目能很方便修改,不要天天考虑一些技巧,其实,产品如果要一直做下去的化,你会发现原来的技巧都是白费。简洁很重要。程序是需要审核的,弄那么多技巧都没有办法审核了。

使用特权

评论回复
78
平常人| | 2008-3-24 22:06 | 只看该作者

顶57楼的fsaok,顺便讲个故事。。。。。。。

有10个中国程序员和10个印度程序员做一道程序设计的题目,结果10个印度程序员有9个人的程序结构和思路一样,而10个中国程序员却给出了10种不同的程序结构。

你们认为是中国人聪明还是印度人聪明?目前世界软件产业的现状与上述现象有什么联系?

使用特权

评论回复
79
HWM| | 2008-3-25 07:15 | 只看该作者

顶80楼:楼层好,内容也棒。

使用特权

评论回复
80
paopao84| | 2008-3-25 20:35 | 只看该作者

狂顶57楼和80楼

通俗简洁易懂是最重要的

从80楼的故事

我们应该清楚中国软件业如此现状。。。

使用特权

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

本版积分规则