电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

程序员必知:cc++面试题(1)

58页
  • 卖家[上传人]:ji****n
  • 文档编号:45692844
  • 上传时间:2018-06-18
  • 文档格式:DOC
  • 文档大小:411KB
  • / 58 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、1c/c+笔试题大解析1. 以下三条输出语句分别输出什么?C 易char str1 = “abc“;char str2 = “abc“;const char str3 = “abc“; const char str4 = “abc“; const char* str5 = “abc“;const char* str6 = “abc“;cout temp;unsigned int const size2 = temp;char str2 size2 ;答:str2 定义出错,size2 非编译器期间常量,而数组定义要求长度必须为编译期常量。2. 以下反向遍历 array 数组的方法有什么错误?STL 易vector array;array.push_back( 1 );array.push_back( 2 );array.push_back( 3 );for( vector:size_type i=array.size()-1; i=0; -i ) / 反向遍历 array 数组cout array。其次 vector:size_type 被定义为 unsigned int,即无符号数,

      2、这样做为循环变量的 i 为 0 时再减 1 就会变成最大的整数,导致循环失去控制。9. 以下代码中的输出语句输出 0 吗,为什么?C+易struct CLSint m_i;CLS( int i ) : m_i(i) CLS()CLS(0);CLS obj;cout ( dest );const char* psrc = static_cast( src );if( pdestpsrc int vals10;int error=-1;void main()put(0)=10; /以 put(0)函数值作为左值,等价于 vals0=10;put(9)=20; /以 put(9)函数值作为左值,等价于 vals9=20;cout=0 char x2;a;void main()a.x0 = 10;a.x1 = 1;printf(“%d“,a.i);答案:266 (低位低地址,高位高地址,内存占用情况是 Ox010A)b)main()union /*定义一个联合*/int i;struct /*在联合中定义一个结构*/char first;char second;half;number;numb

      3、er.i=0x4241; /*联合成员赋值*/printf(“%c%cn“, number.half.first, mumber.half.second);number.half.first=a; /*联合中结构成员赋值*/number.half.second=b;printf(“%xn“, number.i);getch();答案: AB (0x41 对应A,是低位;Ox42 对应B,是高位)6261 (number.i 和 number.half 共用一块地址空间)11. 已知已知 strcpy 的函数原型:的函数原型:char *strcpy(char *strDest, const char *strSrc)其中)其中 strDest 是目的字符串,是目的字符串,strSrc 是源字符串。不调用是源字符串。不调用 C+/C 的字符串库函数,的字符串库函数,请编写函数请编写函数 strcpy.答案:char *strcpy(char *strDest, const char *strSrc)if ( strDest = NULL | strSrc = NULL)return NU

      4、LL ;if ( strDest = strSrc)return strDest ;char *tempptr = strDest ;while( (*strDest+ = *strSrc+) != 0);7return tempptr ;12. 已知已知 String 类定义如下:类定义如下:class Stringpublic:String(const char *str = NULL); / 通用构造函数String(const String / 拷贝构造函数 String(); / 析构函数String / 赋值函数private:char *m_data; / 用于保存字符串;尝试写出类的成员函数实现。答案:String:String(const char *str)if ( str = NULL ) /strlen 在参数为 NULL时会抛异常才会有这步判断m_data = new char1 ;m_data0 = 0 ;elsem_data = new charstrlen(str) + 1;strcpy(m_data,str);String:String(const S

      5、tring strcpy(m_data,other.m_data);Stringdelete m_data; /删除原来的数据,新开一块内存m_data = new charstrlen(rhs.m_data) + 1;strcpy(m_data,rhs.m_data);return *this ;String:String()delete m_data ;13. .h 头文件中的头文件中的 ifndef/define/endif 的作用?的作用?答:防止该头文件被重复引用。14. i nclude 与与 i nclude “file.h“的区别?的区别?答:前者是从 Standard Library 的路径寻找和引用 file.h,而后者是从当前工作路径搜寻并引用 file.h. 15.在 C+ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”?首先,作为 extern 是 C/C+语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变

      6、量以关键字extern 声明。例如,如果模块 B 欲引用该模块A 中定义的全局变量和函数时只需包含模块A 的头文件即可。这样,模块 B 中调用模块A 中的函数时,在编译阶段,模块 B 虽然找不到该函数,但是并不会报错;它会在连接阶段中从模块 A 编译生成的目标代码中找到此函数 extern “C“是连接申明(linkage declaration),被 extern “C“修饰的变量和函数是按照 C 语言方式编译和连接的,来看看C+中对类似 C 的函数是怎样编译的:作为一种面向对象的语言,C+支持函数重载,而过8程式语言 C 则不支持。函数被 C+编译后在符号库中的名字与 C 语言的不同。例如,假设某个函数的原型为:void foo( int x, int y );该函数被 C 编译器编译后在符号库中的名字为_foo,而 C+编译器则会产生像_foo_int_int 之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。_foo_int_int 这样的名字包含了函数名、函数参数数量及类型信息,C+就是靠这种机制来实现函数重载

      7、的。例如,在 C+中,函数void foo( int x, int y )与 void foo( int x, float y )编译生成的符号是不相同的,后者为_foo_int_float.同样地,C+中的变量除支持局部变量外,还支持类成员变量和全局变量。用户所编写程序的类成员变量可能与全局变量同名,我们以“.“来区分。而本质上,编译器在进行编译时,与函数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全局变量名字不同。未加 extern “C“声明时的连接方式假设在C+中,模块 A 的头文件如下/ 模块 A 头文件 moduleA.h#ifndef MODULE_A_H#define MODULE_A_Hint foo( int x, int y );#endif 在模块 B 中引用该函数:/ 模块 B 实现文件 moduleB.cppi nclude “moduleA.h“foo(2,3);实际上,在连接阶段,连接器会从模块 A生成的目标文件 moduleA.obj 中寻找_foo_int_int 这样的符号!加 extern “C“声明后的编译和连接

      8、方式加 extern “C“声明后,模块 A 的头文件变为:/ 模块 A 头文件 moduleA.h#ifndef MODULE_A_H#define MODULE_A_Hextern “C“ int foo( int x, int y );#endif 在模块 B 的实现文件中仍然调用 foo( 2,3 ),其结果是:(1)模块 A 编译生成 foo 的目标代码时,没有对其名字进行特殊处理,采用了 C 语言的方式;(2)连接器在为模块 B 的目标代码寻找foo(2,3)调用时,寻找的是未经修改的符号名_foo.如果在模块 A 中函数声明了 foo 为 extern “C“类型,而模块 B 中包含的是 extern int foo( int x, int y ) ,则模块 B 找不到模块 A 中的函数;反之亦然。所以,可以用一句话概括 extern “C”这个声明的真实目的(任何语言中的任何语法特性的诞生都不是随意而为的,来源于真实世界的需求驱动。我们在思考问题时,不能只停留在这个语言是怎么做的,还要问一问它为什么要这么做,动机是什么,这样我们可以更深入地理解许多问题):实现 C+与

      9、C 及其它语言的混合编程。明白了 C+中 extern “C“的设立动机,我们下面来具体分析 extern “C“通常的使用技巧:extern “C“的惯用法(1)在 C+中引用 C 语言中的函数和变量,在包含 C 语言头文件(假设为 cExample.h)时,需进行下列处理:extern “C“i nclude “cExample.h“而在 C 语言的头文件中,对其外部函数只能指定为 extern 类型,C 语言中不支持extern “C“声明,在。c 文件中包含了 extern “C“时会出现编译语法错误。C+引用 C 函数例子工程中包含的三个文件的源代码如下:9/* c 语言头文件:cExample.h */#ifndef C_EXAMPLE_H#define C_EXAMPLE_Hextern int add(int x,int y);#endif/* c 语言实现文件:cExample.c */i nclude “cExample.h“int add( int x, int y )return x + y;/ c+实现文件,调用 add:cppFile.cppextern “C“i nclude “cExample.h“int main(int argc, char* argv)add(2,3);return 0;如果 C+调用一个 C 语言编写的。DLL 时,当包括。DLL 的头文件或声明接口函数时,应加 extern “C“ .(2)在 C 中引用 C+语言中的函数和变量时,C+的头文件需添加 extern “C“,但是在C 语言中不能直接引用声明了 extern “C“的该头文件,应该仅将 C 文件中将 C+中定义的extern “C“函数声明为 extern 类型。C 引用 C+函数例子工程中包含的三

      《程序员必知:cc++面试题(1)》由会员ji****n分享,可在线阅读,更多相关《程序员必知:cc++面试题(1)》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
     
    收藏店铺
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.