开道比较难的面试题大家答?牛人来
1. 请解释各段代码的含义(能看懂多少就解释多少)
(*(void (*))0)();
typedef char (*(*fn)(char (*)[],char (*)(char)))[];
问题点数:0、回复次数:42Top
1 楼zjz800800((对不起,偶是卧底))回复于 2006-06-13 15:15:49 得分 0
看来确是有难度Top
2 楼KeSummer([IN]LPVOID YourLove,[OUT]LPVOID MyLove)回复于 2006-06-13 15:52:14 得分 0
汗~~一点也不懂,好象是函数定义..Top
3 楼honker110(honker)回复于 2006-06-13 16:22:09 得分 0
第二个fn应该是一个函数指针数组吧,函数返回值是char *,第一个参数是char*的数组,也就是char**吧?第二个参数还是个函数指针,返回值是char,参数是char,不知道说得对不对,哪位牛人来看一下Top
4 楼cpio(备注)回复于 2006-06-13 16:25:51 得分 0
有什么意思啊,写这种代码
Top
5 楼honker110(honker)回复于 2006-06-13 16:25:54 得分 0
第一个似乎是函数调用,但我在VC里面编译不过啊Top
6 楼CUG122032(烫烫烫烫烫烫?烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫?烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫)回复于 2006-06-13 16:33:23 得分 0
有意思吗>?Top
7 楼liu_qi2006()回复于 2006-06-13 16:33:40 得分 0
这公司是搞语言的?
出这样的题有P用? 谁编码这样写?
面试的时候 直接 说 我不会这样写 就Ok了Top
8 楼zjz800800((对不起,偶是卧底))回复于 2006-06-13 16:40:53 得分 0
楼上的兄弟:
这个你真的说错了,这种题力度很深,特别是图形图像方面的算法等等,dll还有co相互调用等等,经常用到的这些相同的概念,本人有这种感觉,自认为基础很好,但是遇到这些也感觉概念不清,这其实是基本概念的综合运用。Top
9 楼zjz800800((对不起,偶是卧底))回复于 2006-06-13 16:42:33 得分 0
楼上的兄弟:
这个你真的说错了,这种题力度很深,特别是图形图像方面的算法等等,dll还有com相互调用等等,经常用到的这些相同的概念,本人有这种感觉,自认为基础很好,但是遇到这些也感觉概念不清,这其实是基本概念的综合运用.Top
10 楼aa3000(杀手K)回复于 2006-06-13 16:44:07 得分 0
不懂,看上去第一段代码是不能在VC上编译通过的,感觉是纯C的。但毫无意义Top
11 楼daisy122(猫咪)回复于 2006-06-13 16:44:46 得分 0
头晕。兼没分。还是表做了,路过。Top
12 楼zjz800800((对不起,偶是卧底))回复于 2006-06-13 16:54:09 得分 0
这两段代码都可以在vc环境下运行,命题组说已经测试过了,其中第一段代码不能单独运行,只让解释含义Top
13 楼zjz800800((对不起,偶是卧底))回复于 2006-06-13 17:02:53 得分 0
给大家来个抛砖引玉,第一个语句是个函数,返回一个地址为零的函数,我这样认为的,希望大家发表自己的见解Top
14 楼ahao(天·狼·星星)回复于 2006-06-13 17:04:00 得分 0
用左(or右?忘了)螺旋法则解决,具体怎么做,忘了。Top
15 楼apollon_hhy(一天五十页!)回复于 2006-06-13 17:14:45 得分 0
第一个是 一个函数指针 感觉0是不是LZ 的笔误呢?楼上的 返回地址为0的函数,内存中没有地址0吧。
第二了定义了一个函数指针数组 。
Top
16 楼zjz800800((对不起,偶是卧底))回复于 2006-06-13 17:26:53 得分 0
不是笔误,这是我们单位的面试题,放了半年了,反正没人答出来过,我当时笔试的时候别的题答得可以才进来的,当时我也没打出来,感觉遗憾Top
17 楼Maconel(Maconel)回复于 2006-06-13 17:41:05 得分 0
第一个编译通不过,估计是编译器不一样,但是稍微改一下就可以了(我想我改的应该符合出题人的意思):
(*(void (*)())0)();
这句的意思是这样:
typedef void (*FN)();//定义一个函数指针类型,这是很常见的
FN pfn = (fn)0;//把0,也就是NULL,强制转为FN型
(*pfn)();//调用pfn,也可以写成pfn();Top
18 楼ahao(天·狼·星星)回复于 2006-06-13 17:45:17 得分 0
好题目,如果我出面试题,可以这样,
typedef char (*(*fn)(char (*(*fn)(char (*)[], char (*)(char (*(*fn)(char (*)[],char *[], char (*)(char, char (*(*fn)(char (*(*fn)(char (*)[], char (*)(char (*(*fn)(char (*)[],char *[], char (*)(char)))[])))[],char (*)[],char *[], char (*)(char)))[])))[])))[],char (*)[],char *[], char (*)(char)))[];
估计放一万年也破译不出来Top
19 楼koko_han(霜之哀伤)回复于 2006-06-13 19:58:17 得分 0
这个公司是研究编译原理的吧?除非哥们感兴趣,否则千万不要去.Top
20 楼aming112(测试并开发着)回复于 2006-06-13 23:15:06 得分 0
知道编程规范的最重要的一条就是尽量写最简单的代码,。
出这样的题的人根本就没有得到编程精髓。Top
21 楼zjz800800((对不起,偶是卧底))回复于 2006-06-14 01:54:43 得分 0
楼上的,年轻人还是虚心点的好,写代码当然是越简单越好,地球人都知道,但是有的东西不可能简单的,你光写简单的,不写复杂的,你不读别人的代码了,你不使用别人现有已开发好的库了,你用过stl范式编成吗 ?经常写模板的特化吗?用过boost库吗?ssl吗?ace吗?这些开源已经写好了,直接调用就行了,但没有好的c++功底你读都读不懂还改写,改写出来一堆垃圾谁受得了,有的东西不是简简单单说个简单就简单,认识不了复杂的你就写不了简单的,你不认识复杂的就写简单的那肯定你太简单了,无语.命题组组长是计算机系的研究生导师,和我们一起做项目,vc代码写的相当规范,现在40岁左右了还一直在写代码,我比较佩服(一是水平二是一直能坚持写代码),水平也相当高,编程规范肯定比你看得多,编程精髓掌握的如何,我想大家心里都有数.Top
22 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2006-06-14 01:56:25 得分 0
难吗?只觉得出题人很恶心。白痴级别
typedef char (*(*fn)(char (*)[],char (*)(char)))[];
分步分析,先来看三个类别:
// 将一个指向不定元素个数的char类型数组的指针声明为TYPE_RETURN类型
typedef char (*TYPE_RETURN)[];
// 将一个指向不定元素个数的char类型数组的指针声明为TYPE_PARAM1类型
typedef char (*TYPE_PARAM1)[];
// 将一个函数的指针声明为TYPE_PARAM2类型
// 这个函数的参数只有一个,类型是char;有返回值,其类型也是char
typedef char (*TYPE_PARAM2)(char);
// 实现一个TYPE_PARAM2类型的函数
char ParamFunc( char )
{
return 0;
}
// fn实际是一个函数指针的类型声明,有两个参数。
// 第一个参数的类型TYPE_PARAM1,第二个参数的类型是TYPE_PARAM2
// 它有返回值,其类型就是TYPE_RETURN。下面拆开来看一下
typedef char (* // char表示返回值的基本数据类型,*表示返回值是个指针类型
(*fn) // *表示声明了一个指针,fn为声明的名称
( // 开始参数表
char (*)[], // 参数1,char为基本数据类型,*表示指针,[]表示数组,即指向数组的指针
char (*)(char) // 参数2,由于后一个char带有圆括号,因此这是一个函数指针类型
// 头一个char为返回值类型,*表示函数指针,后一个char为此函数唯一的一个参数的类型
)// 参数表结束
)[];// 表示一个数据,圆括号优先级高,因此这是一个指响数组的指针
// 下面实现一个这样的函数
TYPE_RETURN MainFunc( TYPE_PARAM1 p1, TYPE_PARAM2 p2 )
{
TYPE_RETURN b = 0;
return b;
}
// 做一下测试
void Test( char (*p)[] ) // 参数为一个指向不定元素的char型数组的指针
{
fn a = MainFunc; // 测试类型是否匹配
TYPE_RETURN ret = a( p, ParamFunc ); // 测试参数分析是否正确
Test( ret ); // 测试返回值分析是否正确
}
// 测试成功
太无聊了!垃圾人出垃圾题Top
23 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2006-06-14 02:06:05 得分 0
第一题有毛病,编译器都解释不了,让人解释个鸟啊
应该是(*(void(*)())0)();才对
将0强制转换一个无返回无参数的函数指针类型,并调用之。
能运行就鬼了。
Top
24 楼ahao(天·狼·星星)回复于 2006-06-14 02:09:42 得分 0
楼主真是程序员中的孔乙己了,这种东西本来是编译器的事情,你偏要用脑袋去想,自己还觉得挺厉害的,告诉你,要分析这个,完全是体力活,方法我上面已经说了,右左原则,或者叫左手螺旋法则。
写成这样,你看起来累不累?你就不能分成几个typedef,写清楚些?Top
25 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2006-06-14 02:12:32 得分 0
奉劝楼主一句,知道一大堆C++扩展库并不见得水平有多高。
任何时间任何地点任何人都没有必要把函数指导针这样子恶搞。
如果真的很闲,不如研究一下设计模式,真的牛的话用C++设计一套大型数据库的架构,这才是体现C++水平的真正方式。Top
26 楼BinaryTreeEx(狂徒(完全抵制日货))回复于 2006-06-14 07:24:59 得分 0
to zjz800800((对不起,偶是卧底))
从你回帖的态度来看很是得意地,不要别人回了一个帖子就说是年轻人,你是如
何知道的?我不否认对语法掌握尽可能多一些或者深一些是好处的。但是一味专
进去有什么意义?你说图形图像程序方面可能会用到,或者stl之类也会用到,这
个我不知道,因为我没有用过,但是如果有人不明白问一下知道的人就可以了。
何必费劲自己琢磨?就像语法错误编译一下就可以了,让编译器去找。而读代码查
错能力可以慢慢培养,这个不是一天两天可以有的。
别人写的东西确实要看,但是现在写程序的人也会考虑别人会看我的程序,如果有
谁的代码写成这样,那又有多少去看意义。编译器对代码的理解能力肯定比人高,
代码当然简单易懂为好,个别地方追求效率的可以考虑从算法入手,当然编程技巧
也是要的。只是希望搂住不要太自以为事,把这种题目说的如何如何,做不出你这
道题的就不是优秀程序员了?
再多说一句,就算你要考的内容很重要,但是你以这种形式来考实在是浪费了内容。
你就没有考虑一下以一种人人都会作,只有你要的那个人才才能做对形式来考么?Top
27 楼nickgg(匿名哥哥)回复于 2006-06-14 08:20:48 得分 0
(*(void(*)())0)();
单片机的C软复位用的就是它!!!Top
28 楼templarzq(原谅我这一生不羁放纵爱自由,也会怕有一天会跌倒)回复于 2006-06-14 09:22:48 得分 0
楼上的能否解释一下单片机软复位的意义。。Top
29 楼yjhgmyyamd(优优人)回复于 2006-06-14 09:27:45 得分 0
指针?
以指针的地址定义数据组吗?Top
30 楼xdkui(xdkui)回复于 2006-06-14 09:32:41 得分 0
第一个感觉倒是很好理解,相当于
mov eax,[0]
call eax 吧
不知道对否
至于nickgg说的单片机软复位
51是上电是从程序地址0开始执行,应该相当于
mov eax,0
call eax
感觉还是不同的吧?Top
31 楼xiaoheng_wh(XH)回复于 2006-06-14 09:53:13 得分 0
我比较关心能做出这道题,能给出多少薪水。
哈哈
我还从没有见到面试问这种问题的,除了无聊的考试。Top
32 楼zjz800800((对不起,偶是卧底))回复于 2006-06-14 10:03:17 得分 0
我发现这里的星星倒是蛮喜欢扎堆喜欢搞人生攻击,大家都觉得这题目无聊那就10分钟内结贴,不浪费大家宝贵时间了Top
33 楼zjz800800((对不起,偶是卧底))回复于 2006-06-14 10:15:38 得分 0
怎么结不了贴子Top
34 楼2004v2004(980)回复于 2006-06-14 10:50:40 得分 0
我经历的面试也有这样的情况,
我说说我的辽宁沈阳经历:
2004来到沈阳,有一个做食堂售饭系统的(名字具体忘记了),他需要是pb 的程序员,当时我不会pb ,我会delphi 和vb,当时他的招聘也要vb的,我就添了一个表,
1:其中有个适用期待遇(我写1500,大家可能说少,也有说多的,但是当时---现在沈阳的也就是800-2000左右,好点的也就是3000以内吧(使用vb、delphi、asp、.net、vc)这种语言的,我说的是处于90%的人说的,可能有人很高,至少我认识的圈子套圈子没有几个超过2500的也没有3000的)抛开公务员(国家统计的)至少我认为我的比较接近现实。
结果连个面试通知都没有,过了两个星期,我当时已经找到一个了,不是很满意,骑马找马吧,我又去了人才市场,看到他还招聘vb的人员写工资2000。我又添一个表(试用期待遇 面仪,我就看这个公司什么态度,我猜测能有面试机会,因为我没有写价格),结果第二天就给消息了,我去看看,结果出了一份考卷,类似咱们上学的时候考题(我记忆中有 什么是进程?什么是线程?他们的区别,还有写pb 的术语,什么数据窗口了,等吧 时间长了我也忘记了,大约有6页)我看了看题,写个名字就走了Top
35 楼zjz800800((对不起,偶是卧底))回复于 2006-06-14 11:22:39 得分 0
很多公司的笔试我也非常的讨厌,其实只要技术人员面谈一下就可以摸清楚应聘者的水平到底有多高,笔试是最差劲的,因为现在开发东西都可以查相关源代码,但笔试的时候什么也不行,加如一条语句忘了就写不出程序了,但其实这对一个优秀的开发人员来说是多么的不重要,只要查找一下msdn就ok了,但现在笔试是种社会产物,无语Top
36 楼badboy19800808(我是大飞猪他爹!!!)回复于 2006-06-14 12:49:01 得分 0
看不懂,汗!!!Top
37 楼kinzz()回复于 2006-06-14 15:34:14 得分 0
nickgg(匿名哥哥)说得不错哈,一般单片机把代码入口地址放在0地址
(*(void (*))0)(); 先把0转换成地址(void (*))0, 然后(*(void (*))0)取0地址的值,再把这个值做函数地址进行函数调用,就是(*(void (*))0)();Top
38 楼kinzz()回复于 2006-06-14 15:49:30 得分 0
typedef char (*(*fn)(char (*)[],char (*)(char)))[]; 应该是定义了一个叫fn的指针数组类型,这些指针是指向函数的指针的指针,这个函数是char fn(char (*)[],char (*)(char));第一个参数是char的指针数组,第二个参数又是一个函数指针。Top
39 楼wubaowang(Knowledge is power)回复于 2006-06-14 16:06:27 得分 0
无语Top
40 楼haodaniu(大牛)回复于 2006-06-14 17:06:01 得分 0
还是kinzz分析得对啊Top
41 楼quanyy(天堂电影院)回复于 2006-06-14 17:37:34 得分 0
ahao(天·狼·星星) ( ) 信誉:96 2006-6-14 2:09:42 得分: 0
楼主真是程序员中的孔乙己了,这种东西本来是编译器的事情,你偏要用脑袋去想,自己还觉得挺厉害的,告诉你,要分析这个,完全是体力活,方法我上面已经说了,右左原则,或者叫左手螺旋法则。
写成这样,你看起来累不累?你就不能分成几个typedef,写清楚些?
----------------------------------------------------------
支持,楼主你在研究茴香豆的茴有几种写法啊Top
42 楼zjz800800((对不起,偶是卧底))回复于 2006-06-15 16:46:50 得分 0
to quanyy(quanyy) ( ) 信誉:92
我想研究你妈是不是个垃圾有几种拉法Top




