校招【 笔试面试 】准备之C语言 基础知识一
2014-08-04 20:42
267 查看
即将来临的校招,让人振奋。
先梳理下,C语言的基础知识,知识点很零碎,都是平时看到时的小小记录,也权当复习了,温故而知新吧~~~欢迎指正~~
1、X = X& (X -1) 在面试题中,看到这个式子会想到什么?
=》X转化为二进制后,所包含的1 的个数。
即若最右边位是0,那么-1的操作是把最右边的1开始,所有位取反,而每次的&,都将X最右边的1变为0,那么有多少个1,式子就能执行多少次,知道X变为0。所以一般而言,count记录X的1的位数。
或者
2、表达式X,Y,当if(X&&Y)语句时,当X的不满足时,Y就不执行了,所以,Y中的变量也不会进行改变 或计算。
3、浮点数在内存中,与整数的储存方式不同,float a; 那么(int &)a,相当于去该浮点数地址开始的,sizeof(int)个字节当成int型数据输出。
4、①a,b值比较大小,不用if,?,switch或其他判断语句.
max = ((a+b)+abs(a-b))/2;
②可以用额外空间,
int c= a-b;
char *str[] = {"a larger", "b larger"};
c = unsigned(c) >> (sizeof(int)*8 -1);
cout << *str[c];
5、交换a,b的值,不适用额外空间。
a = a^b;
b = a^b;
a = a^b;
分析下: b = (a^b)^b = a^b^b=a^0=a; a同理
6、static变量存放在全局数据区,sizeof计算栈的大小,不会将class内的静态变量算在class的空间大小内。
7、sizeof和strlen的区别:
sizeof和strlen的结果类型是unsigned int;
sizeof是关键字(注意,这里不是运算符),strlen是函数;
sizeof可用类型做函数,strlen只能是char*,并且必须以'\0'结尾;
sizeof 数组做参数不退化为指针,strlen数组退化为指针;
编译时,sizeof的值已经计算出来,strlen是函数,运行后才出结果;
sizeof不能用于函数类型,不完全类型,且不能返回动态数组的大小,例如new ....(当然,这在C++中才有的);
8、类对象的大小 = 各非静态数据成员 + 指针指向虚函数表(虚函数)+ 指向虚基表指针(虚继承) + 编译器的额外字节(数据对齐)
9、函数的生命可以不写形参名,只写形参类型。
10、所有的函数都放在代码区。
先梳理下,C语言的基础知识,知识点很零碎,都是平时看到时的小小记录,也权当复习了,温故而知新吧~~~欢迎指正~~
1、X = X& (X -1) 在面试题中,看到这个式子会想到什么?
=》X转化为二进制后,所包含的1 的个数。
即若最右边位是0,那么-1的操作是把最右边的1开始,所有位取反,而每次的&,都将X最右边的1变为0,那么有多少个1,式子就能执行多少次,知道X变为0。所以一般而言,count记录X的1的位数。
int count = 0; while(X) { X = X & (X-1); count ++; }
或者
2、表达式X,Y,当if(X&&Y)语句时,当X的不满足时,Y就不执行了,所以,Y中的变量也不会进行改变 或计算。
3、浮点数在内存中,与整数的储存方式不同,float a; 那么(int &)a,相当于去该浮点数地址开始的,sizeof(int)个字节当成int型数据输出。
4、①a,b值比较大小,不用if,?,switch或其他判断语句.
max = ((a+b)+abs(a-b))/2;
②可以用额外空间,
int c= a-b;
char *str[] = {"a larger", "b larger"};
c = unsigned(c) >> (sizeof(int)*8 -1);
cout << *str[c];
5、交换a,b的值,不适用额外空间。
a = a^b;
b = a^b;
a = a^b;
分析下: b = (a^b)^b = a^b^b=a^0=a; a同理
6、static变量存放在全局数据区,sizeof计算栈的大小,不会将class内的静态变量算在class的空间大小内。
7、sizeof和strlen的区别:
sizeof和strlen的结果类型是unsigned int;
sizeof是关键字(注意,这里不是运算符),strlen是函数;
sizeof可用类型做函数,strlen只能是char*,并且必须以'\0'结尾;
sizeof 数组做参数不退化为指针,strlen数组退化为指针;
编译时,sizeof的值已经计算出来,strlen是函数,运行后才出结果;
sizeof不能用于函数类型,不完全类型,且不能返回动态数组的大小,例如new ....(当然,这在C++中才有的);
8、类对象的大小 = 各非静态数据成员 + 指针指向虚函数表(虚函数)+ 指向虚基表指针(虚继承) + 编译器的额外字节(数据对齐)
9、函数的生命可以不写形参名,只写形参类型。
10、所有的函数都放在代码区。
相关文章推荐
- 计算机专业校招笔试面试基础知识总结
- C++基础知识面试笔试准备
- IT笔试面试知识准备
- 笔试面试中基础知识点总结概要篇
- 技术面试笔试基础知识清单
- 2017最新Java基础面试笔试知识整理--java基础篇
- 找工作笔试面试补充基础知识(1)---内存对齐
- 笔试面试——java基础知识
- Java面试笔试指南(一)---基础知识
- Java基础知识(面试笔试)
- 准备Java面试之——Java SE基础知识解答(二)
- 2014年IT公司笔试面试基础知识及简述
- java笔试面试基础知识
- 2017最新Java基础知识面试笔试整理--jvm基础篇
- 校招笔试面试常考的数据库知识
- 阿里数据分析师面试准备一:云计算基础知识
- Java程序员笔试面试之java基础知识
- 面试基础知识准备
- 对C++基础知识的总结(主要针对笔试面试)