您的位置:首页 > 编程语言 > C语言/C++

校招【 笔试面试 】准备之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的位数。

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 笔试 面试 校招 基础