




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、The Questions for Developing ApplicantsPlease note: The questions with asterisk (*) can not be empty.Describe general experience with:1. LAN's, WAN.2. Unix, Windows3. Programming Languages.4. Device DriverGeneral questions:1.Describe an experience you feel proud of in programming, such as creati
2、vely resolving a programming (coding, algorithms, structure or others)problem you encountered in the past.2.What's your biggest project? What a role did you played in it?3.What's difference between dealing with an English string and a Chinese String?4.Do you know about GB code, Big5 code, Un
3、icode? Would you please give me your understanding of their relationship and difference?5. Now I have an English application and its source code, such as a word processor. What would you do to make it work correctly in Chinese environment?6. If you're free to choose a job, what would you like to
4、 do: marketing, tester engineer, software programmer, project manager, or other? And why? Will you accept a different assignment other than the job you like, such as tester engineer position?C QUESTIONS:1.* Explain the difference between "call by value" and "call by reference" in
5、 a programming language. How do these apply to the C language? call by value :调用时子程序得到的是参数值的副本,子程序中对形参的改变其实只是影响了该副本的值,但在返回主程序后该副本会被丢弃,因此在主程序中按值调用的参数仍保持原来的值。call by reference :调用时子程序得到的是实际参数的内存地址,因此在子程序中改变形参的值时,实际会导致对该形参所对应的地址处的内存数据的变化,即直接修改的是主程序中的变量的值,返回主程序后该参数所对应的变量值会产生变化。2.*Explain how C pointers
6、work. What are they really? How can they be used? What are the most useful/vital ways to use them? 变量的地址称为变量的指针,即指针是一个内存单元的地址。指针的基本形态有以下几种:(1)int *p; /p为指向整型数据的指针变量(2)int *pn; /定义指针数组p(3)int *p(); /p为指针函数,返回一个指向整型数据的指针(4)int (*p)(); /p为指向函数的指针,该函数返回一个整型值(5)int (*p)n /p为指向含有n个元素的一维数组的指针变量(6)int *p; /
7、p为指向指针的指针,被指向的指针指向一个整型数据(7)int(*p)n /p是一个指向另一个指针变量的指针变量,被指向的指针变量指向一个含有n个整型数据的一维数组(8)int *p()n /p为返回整型指针数组(首地址)的函数(9)int (*p)() /p为指向返回整型数值函数的指针数组指针的使用:(1) 指针和数组对于数组ai表示数组a的第i+1个变量,a是数组名,表示该数组的首地址。即a与&a0等价,而p=a;通过p来访问数组元素。(a) p,a,与&a0它们之间是等价的,都表示数组a的首地址(b) int *p=a;*p=1;为所指向的存储单元赋值1(c) int *p
8、=a;表达式p+1为指向p的下一个存储单元(d) 表达式p+i为指向p后第i个元素。ai,*(a+i),*(p+i)都表示数组a的第i个元素(2) 指针与函数参数的选择如果用数组名作为函数参数,实参数组名代表数组首地址,而形参是用来接收从实参传递过来的首地址,因此,形参应该是一个指针变量,因为只有指针变量才能存放地址。(3) 指针与链表链表P中每一个元素都有一个指针,用于存放下一个元素的地址,当要访问P中某一个元素时,只需要找到链表的首地址即可3.*What is a pointer to a function? How do you declare it? What is it useful
9、 for?函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数。函数指针的声明方法为:函数类型 (标志符指针变量名) (形参列表);函数指针有两个用途:调用函数和做函数的参数。4. *What are function prototypes? How are they used, and what are they useful for? 函数声明由函数返回类型、函
10、数名和形参列表组成。形参列表必须包括形参类型,但是不必对形参命名。这三个元素被称为函数原型,函数原型描述了函数的接口。函数原型类似函数定义时的函数头,又称函数声明。为了能使函数在定义之前就能被调用,C+规定可以先说明函数原型,然后就可以调用函数。函数定义可放在程序后面。 由于函数原型是一条语句,因此函数原型必须以分号结束。函数原型由函数返回类型、函数名和参数表组成,它与函数定义的返回类型、函数名和参数表必须一致。函数原型不必包含参数的名字,可只包含参数的类型。5. *Explain how memory management is handled in C. What does C do fo
11、r the programmer, and what does the programmer need to do explicitly? C语言常用的内存管理函数有以下三个:1. 分配内存空间函数malloc调用形式:(类型说明符*)malloc(size)功能:在内存的动态存储区中分配一块长度为"size"字节的连续区域。函数的返回值为该区域的首地址。“类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。2. 分配内存空间函数 calloccalloc 也用于分配内存空间。调用形式:(类型说明符*)ca
12、lloc(n,size)功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符*)用于强制类型转换。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。2. 释放内存空间函数free调用形式:free(void*ptr);功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。6.*Explain what a C struct (structure) is. What makes them usefull? 结构体(stru
13、ct)是由一系列具有相同类型或不同类型的数据构成的数据集合。结构体和其他类型基础数据类型一样,如int类型,char类型 只不过结构体可以做成你想要的数据类型。在实际项目中,结构体是大量存在的。结构体常用来封装一些属性来组成新的类型。结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。7.*How does error handling work in C. What's the difference between compile-time errors and run-time errors? Wh
14、at are some good ways to programatically handle run-time errors?错误处理方法:1 返回值方式:用函数的返回值标志函数是否执行成功。 返回值可以判定正确错误,或则增加一些简单的错误类型判定. 其缺点在于一旦函数修改后返回值回有变化的话就很麻烦,当然最重要的还在于无法明确获知错误信息。总的来说一般返回值只是做简单的正确错误判定,而不能作为获知具体错误的手段。 2 全局errno方式:在出现错误的时候,将错误代码记录到一个全局变量errno中。比如waitpid()函数在被信号中断的情况下,将errno设置为EINTR(一宏定义常量)。
15、这种方式解决了返回值方式遇到的返回值冲突问题,而且效率方面也是非常令人愉悦的。但是它要求用户在调用函数后检查errno的值,这种保证是脆弱的,程序仍然有可能在不处理那些errno的情况下”安然”地运行,导致未定义的结果。另一个问题出在多线程方面,errno不是线程安全的,多个线程操作同一个errno会造成混乱。 3 错误封装:就是将每个有错误返回值的函数分别用一个函数包起来,比如waitpid()函数可以封装成Waitpid()(首字母大写),在这个函数中处理相应的错误。这种错误处理方法可以很好的解决很多问题,应该说效果很好,但是有几个方面需要商榷,一是,并不是每个函数的错误都以一种方式进行处
16、理,另一方面,c语言的函数调用开销相对很高,在函数外面再包上一层会影响性能。 封装向来都是由针对性的,对于错误处理,封装的难度非常大,通用型的封装是不适用的,更多的时候是要根据具体业务来处理的. 4 异常:它的优点是能模拟实现c+中异常的一些优点。但是这个异常机制很脆弱,使用时要注意很多问题,而且它的性能开销肯定也会不小。 5 Goto语句:,当发生错误时,利用goto语句跳到相应的错误处理函数中。因为一直以来对goto语句的偏见,和goto语句本身对程序结构性的影响,所以一直以来少用用过这种方式。编译错误就是说代码有问题,比如说语法错误导致程序无法运行。运行时错误就是说运行时才有可能产生的问
17、题,并且这些问题可以进行处理,从而避免中断程序,产生不好得用户体验。C RELATED QUESTIONS SPECIFIC TO MS-DOS AND WINDOWS:1.Explain what a 16-bit segmented architecture is. What are the positives and negatives about it? How does this affect C programming? How do NEAR and FAR fit into this picture?2.What is a callback function? How is i
18、t used? What is it useful for?3.Explain the difference between static and dynamic linking. Why is dynamic linking useful?Instance Questions:1. * Should we recommend or avoid writing the code in following way, and Why? (If there are any problem, please point them out as much as possible).Void SomeFun
19、ction(void)int* pInt;pInt = new int10000;ASSERT(pInt!=NULL);/Use pInt delete pInt;删除的是一个数组,应该用delete pInt;2. * Please describe the usage of "static" keyword in C/C+. What does the keyword mean in the following code.CC+Static int i;Void f(void)static int j;class cstatic int m_i;static void
20、MemberFunction(void);c语言中static 用法:1. 全局静态变量在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。 (1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)(2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值任意的,除非他被显示初始化)(3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。 定义全局静态变量的好处:<1>不会被其他文件所访问,修改<2>其他文件中可以使用相同名字的变量,不会发生冲突。2. 局部静态变量在局部变量之前加上关
21、键字static,局部变量就被定义成为一个局部静态变量。(1)内存中的位置:静态存储区(2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)(3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。当static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的),但是
22、没有改变它的存放位置,还是在静态存储区中。3. 静态函数在函数的返回类型前加上关键字static,函数就被定义成为静态函数。函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。<1> 其他文件中可以定义相同名字的函数,不会发生冲突<2> 静态函数不能被其他文件所用。左框中第一个static定义一个全局静态变量,第二个static定义一个局部静态变量。右框中第一个static定义一个静态变量,第二个static定义一个静态函数。3. * Please point out the differences between each pair of functions in same row.Inline void SomeFunction(void) void SomeFunction(void) Class cinline void SomeFunction(void) Class cvoid SomeFunction(void) 左面在函数的类型前加了inline,定义了一个内联函数4. * Try to describe the usage of the keyword named "virtual" in the C+ language.虚函数是一个希望在派生类中重新定义
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络游戏虚拟货币发行与游戏角色扮演服务合同
- 东南亚仓储库存盘点与仓储设备租赁合同
- 儿童综合保障计划退保服务协议
- 游戏美术资源制作设计师劳务合同
- 互联网金融服务反欺诈补充合同
- 数字出版物区域独家代理权转让合同
- 工业自动化软件许可及市场推广合作协议
- 太阳能电池技术升级补充协议
- 跨国公司员工离职保密协议及全球竞业限制条款
- 保险业务审核补充合同
- 学校教辅征订管理“三公开、两承诺、一监督”制度
- 课题申报书:现代产业学院内部治理结构研究
- 2025年人教版小学五年级下册奥林匹克数学竞赛试卷(附参考答案)
- 《油气井套管工程检测技术》课件
- 2025届高考语文复习:2024年新课标二卷第九题说题 课件
- 污水管道疏通试题及答案
- 2025年移动式压力容器R2操作证考试笔试试题(200题)附答案
- 造价咨询管理制度体系
- 中马钦州产业园管委会笔试试题
- 2024年农艺师新政策解读试题及答案
- 2025年版中等职业教育专业教学标准 750107 绘画
评论
0/150
提交评论