【面试】C\C++程序基础1

来源:互联网 发布:云计算产业的盈利模式 编辑:程序博客网 时间:2024/05/22 16:51


每天编程,很少整理自己对基础知识的认识。很多天天使用的东西,寻根究底问自己其实还是不太清楚。

今天开始每天做一些面试题,在这里整理自己的误区。

1、一般赋值语句

&& 逻辑与(结果为0或1*)

&    按位与

||    逻辑或(结果为0或1*)

|     按位或

2、C++域操作符

C中不支持此操作符,含有这个操作符的代码以.c文件编译则提示符号错误;

C++中   类名::变量或函数  (类域)

             ::变量或函数         (全局域)

3、i++和++i的区别

int i=8;

printf("%d\n",-i++); //输出-8,i的值变为9

printf("%d\n",-i--); //输出-9 ,i的值变为8

这道题自己错在一个很奇葩的地方,第一次输出以后,我误以为i的值变成了-8++,变成-7。。。
4、i++与++i效率比较
1)考虑内建数据类型的情况,自增表达式的结果没有被使用,只是简单用于增加一员操作数,效率没有区别;
2)考虑自定义数据类型(类),前缀式(++i)可以返回对象的引用,而后缀式(i++)必须返回对象的值,在大对象时产生了较大的复制开销。优先选用前缀式。(++i返回对象的引用;i++总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的值时还会调用其拷贝构造函数。)
http://blog.chinaunix.net/uid-21843387-id-105857.html
5、条件比较语句的编程风格(与0比较)
布尔型变量flag    if(flag)if(!flag)
整形value            if(value==0) if(value!=0)
浮点型x               if ((x>-EPSINON)&&(x<EPSINON))  if((x<-EPSINON)||(x>EPSINON))          ( 因为计算机在处理浮点数的时候是有误差的,所以判断两个浮点数是不是相同,是要判断是不是落在同一个区间的,这个区间就是 [-EPSINON,EPSINON] EPSINON一般很小,10的-6次方以下,具体的好像不确定的,和机器有关)
指针p                  if(p==NULL) if(p!=NULL)                尽管NULL和0的值相同,但两者意义不同。



哭。。。。写了半天忘记保存
10、标准头文件的结构
extern 用法 http://blog.csdn.net/cameracanon/article/details/4061419
11、atexit 函数
exit调用这些注册函数的顺序与它们 登记时候的顺序相反。在atexit(f)调用之前被静态分配的对象的析构函数将在f()的调用之后被调用。在一个atexit(f)调用之后建立的这种对象的析构函数将在f的调用之前被调用。





0 0