一、#include “filename.h”和#include <filename.h>的区别 #l kv&.)x
b}DxD1*nsI
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 WEgJ_dB
&jJj6
+P\
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 $j?zEz
~gz_4gzb
@VlDi1
二、头文件的作用 (~6oA f
!g=2U`j^
加强安全检测 I<p- o/TP
Z(F`M;1>xI
通过头文件可能方便地调用库功能,而不必关心其实现方式 JHN{vB
XcfvmlBoD-
8G&'ED_&
三、* , &修饰符的位置 nksx|i l
{OA2';3
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 ~\;s}Fv.
JDi\?m d.
_.b ^4^[
四、if语句 t=
=+SHGP
`ceetr=
不要将布尔变量与任何值进行比较,那会很容易出错的。 D?yiK=:08`
X=Qa TV
整形变量必须要有类型相同的值进行比较 s,&tD
WU
sFhmp
浮点变量最好少比点,就算要比也要有值进行限制 .UJp#/EHs
v<+5B5"1
指针变量要和NULL进行比较,不要和布尔型和整形比较 8t4o}3>
rVo0H.+N)`
/_yJ;l/K
五、const和#define的比较 :Fe}.* t
]iP
+Y
const有数据类型,#define没有数据类型 v#yeiE4
TGUlJLT
个别编译器中const可以进行调试,#define不可以进行调试 S6~&g|T,
C!a#M{:
在类中定义常量有两种方式 PNNY_t +I
:xd)]Ns
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; 6|h~pH
46p%y
2、 用枚举代替const常量。 *qM)[XO
m-%.LDqM
u">KE6um
六、C++函数中值的传递方式 fa~4+jx>S
U]!~C 1cmw
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) s/' ]* n
v[P
$c$Xi
void fun(char c) //pass by value fpESuVKr
3<c_`BWu
void fun(char *str) //pass by pointer )#|I(Gz ^
^5{M@o
void fun(char &str) //pass by reference =t,}I\_^c
C"X; ,F<
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 ?H7Ym N
G a1B&@T
函数的类型不能省略,就算没有也要加个void 9c `Vrlu
>P-{2
a,4
2h:*lV^
七、函数体中的指针或引用常量不能被返回 WoYXXYP/E
>)V1aLu=
Char *func(void) YfB8
QC/%|M0 {
{ m]XG7:}V0
5
5$J%;&
char str[]=”Hello Word”; vz{Z
tE"
m :M=De
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 m+Um^:\jX
{`X O3
return str; [PRQa[_
qKL:#ny
} R]Iv?)Y
$0(~ID
函数体内的指针变量并不会随着函数的消亡而自动释放 V~tZNRJ-
CAs8=N#H%
71)DLGL
八、一个内存拷贝函数的实现体 Qv v~nGq$
Aw7oyC!
void *memcpy(void *pvTo,const void *pvFrom,size_t size) /b
]Yya#
cN]e{|
{ "$@Wy,yp
Imv]V6"D=
assert((pvTo!=NULL)&&(pvFrom!=NULL)); J%|n^^ /un
1-!q,q
byte *pbTo=(byte*)pvTo; //防止地址被改变 e<.O'!=7Y
reO^_q'
byte *pbFrom=(byte*)pvFrom; RWfC2$z
\DDRl{
while (size-- >0) ZSs)AB_Pe/
=zetZJg
pbTo++ = pbForm++; 0vi)my;!
j B.ZF7q
return pvTo; n#\ t_/\
N51g<K
} b@p3iq:
VH>?%aL
.UdoB`@!v=
九、内存的分配方式 =&9x}4`;%
!%8|R]d
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 +?&|p0
8M5a&