收藏 分享(赏)

程序员面试宝典.doc

上传人:志在邹 文档编号:192379 上传时间:2018-12-05 格式:DOC 页数:35 大小:260KB
下载 相关 举报
程序员面试宝典.doc_第1页
第1页 / 共35页
程序员面试宝典.doc_第2页
第2页 / 共35页
程序员面试宝典.doc_第3页
第3页 / 共35页
程序员面试宝典.doc_第4页
第4页 / 共35页
程序员面试宝典.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、第 5章 程序设计基本概念5.1 赋值语句面试例题 1:Which of the following statements describe the results of executing the code snippet below in C+? (下列 C+代码的输出结果是什么?)台湾某著名杀毒软件公司 2010年 7月笔试题C/C+ codeint i = 1;void main() int i = i;A.The i within main will have an undefined value. (main()里的 i是一个未定义值)B.The i within main wil

2、l have a value of 1.(main()里的 i值为 1) C.The compiler will not allow this statement. (编译器不允许这种写法)D.The i within main will have a value of 0. (main()里的 i值为 0)解析:当面试者看到 int i=i;时,也许第一反应就是怎么有这么诡异的代码?但是在 C+中这样做是完全合法的(但显然不合理)。int i = i,i 变量从声明的那一刻开始就是可见的了,main()里的 i 不是 1,因为它和 main()外的 i无关,而是一个未定义值。答案:A面试例题

3、 2:What does the following program print?(下面程序的结果是多少?)中国台湾某著名计算机硬件公司 2005年 12月面试题#include using namespace std;int main() int x=2,y,z;x *=(y=z=5); cout using namespace std; int func(int x)int count = 0;while(x)count +;x=x return count; int main()cout using namespace std; int main()int a,x;for(a=0,x=0

4、;ausing namespace std; int main()int a,x;for(a=0,x=0;a main() int b=3; int arr=6,7,8,9,10; sint *ptr=arr; *(ptr+)+=123; printf( “%d,%dn “,*ptr,*(+ptr);A8 8 B130 8 C7 7 D7 8解析:C 中 printf计算参数时是从右到左压栈的。几个输出结果分别如下:printf( “%dn “,*ptr); 此时 ptr应指向第一个元素 6。*(ptr+)+=123应为*ptr=*ptr+123;ptr+,此时 ptr应指向第二个元素 7。p

5、rintf( “%dn “,*(ptr-1); 此时输出第一个元素 129,注意此时是经过计算的。printf( “%dn “,*ptr); 此时输出第二个元素 7,此时 ptr还是指向第二个元素 7。printf( “%d,%dn “,*ptr,*(+ptr); 从右到左运算,第一个是(+ptr),也就是 ptr+,*ptr=8,此时 ptr指向第三个元素 8,所以全部为 8。答案:A5.3 编程风格面试例题:We have two pieces of code , which one do you prefer, and tell why.(下面两段程序有两种写法,你青睐哪种,为什么?)美

6、国某著名计算机嵌入式公司 2005年 10月面试题A/ a is a variable写法 1:if( A=a ) a+;写法 2:if( a=A ) a+;B写法 1:for(i=0;i#include #include #include using namespace std;int main()float a = 1.0f; cout int main() unsigned int a = 0xFFFFFFF7; unsigned char i = (unsigned char)a; char* b = (char*) printf(“%08x, %08x“, i,*b); 解析:uns

7、igned int 变量赋值给 unsigned char变量时会发生字节截断(3 位和高于 3位的将被程序自动丢弃)。那么第二个数,也就是 char* b = (char*)上面等价于: unsigned int *p = /p中的内容是 a的地址,即 p指向 a char *b = (char *)p; /此处的强制转换只是使 b也指向 a而已 上面的步骤就是将一个 unsigned int 型的指针强制转换成一个 char型的指针。 所以请注意:这里是 char类型的指针转换,而不是 char类型的转换。这样转换后,假设 a的地址是 x: p + 1 = x + 1*sizeof(int

8、) = x + 1* 4 = x + 4; b + 1 = x + 1*sizeof(char) = x + 1* 1 = x + 1; 影响的是指针的寻址。答案:000000f7,fffffff7。扩展知识C+定义了一组内置类型对象之间的标准转换,在必要时它们被编译器隐式地应用到对象上。隐式类型转换发生在下列这些典型情况下。1在混合类型的算术表达式中在这种情况下最宽的数据类型成为目标转换类型,这也被称为算术转换(Arithmetic Conversion),例如:int ival = 3;double dval = 3.14159;/ ival被提升为 double类型:3.0ival +

9、dval;2用一种类型的表达式赋值给另一种类型的对象在这种情况下目标转换类型是被赋值对象的类型。例如在下面第一个赋值中文字常量 0的类型是 int。它被转换成 int*型的指针表示空地址。在第二个赋值中 double型的值被截取成 int型的值。/ 0 被转换成 int*类型的空指针值int *pi = 0;/ dval 被截取为 int 值 3ival = dval;3把一个表达式传递给一个函数,调用表达式的类型与形式参数的类型不相同在这种情况下目标转换类型是形式参数的类型。例如:extern double sqrt( double );/ 2 被提升为 double类型 2.0cout using namespace std; int main() unsigned char a=0xA5; unsigned char b=a4+1;/cout 4,在计算这个表达式的时候,编译器会先把 a和 4的值转换为 int类型(即所谓整数提升)后再进行计算,当计算结果出来后,再把结果转换成 unsigned char赋值给 b。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 管理方法

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报