一、#include “filename.h”和#include <filename.h>的区别 C@-Hm
t]&.'n,
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 XGZZKvp
(%R%UkwP9
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 $j- Fm:ZIA
'pA%lc)
F>.y>h
二、头文件的作用 *A9v8$
>"/TiQt
加强安全检测 v J0v6\
B>i%:[-e
通过头文件可能方便地调用库功能,而不必关心其实现方式 S\Z*7j3;M
S[L@8z.Sj
4<s;xSCL
三、* , &修饰符的位置 \gP?uJ
l
i<9nMZ<
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 0@_8JB ?E
$l,U)
_L8&.=4]i
四、if语句 7}xQ4M\u$
\0|x<~#j'
不要将布尔变量与任何值进行比较,那会很容易出错的。 }e7/F[c.U
1'~+.92Y
整形变量必须要有类型相同的值进行比较 4s
m [y8
?Z|y-4 &>
浮点变量最好少比点,就算要比也要有值进行限制 _CNXyFw.7
%>K(IRpMW
指针变量要和NULL进行比较,不要和布尔型和整形比较 ^fKKsfIf
U,b80%k:
ZvuY]=^3
五、const和#define的比较 ]Z[3 \~?
U$D:gZ
const有数据类型,#define没有数据类型 *`OXgkQ
R.|h<bur
个别编译器中const可以进行调试,#define不可以进行调试 @yGnrfr
9{u/|,rq1
在类中定义常量有两种方式 QY+{ OCB
qo9&e~Y<G
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; x6>WvFZ
4 4QW&qL!(
2、 用枚举代替const常量。 23LG)or.JC
K;/f?3q
,JH*l:7
六、C++函数中值的传递方式 #NT~GhWFf
LEKE+775
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) ->|eMV'd
^Ip\`2^u
void fun(char c) //pass by value uEPm[oyX
#p"F$@N
void fun(char *str) //pass by pointer '5$: #|-
Il/`#b@h
void fun(char &str) //pass by reference MeD/)T{ G~
ft8
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 ++2a xRl
[GknE#p
函数的类型不能省略,就算没有也要加个void UHY)+6qt]
{(-TWh7V
(QFZM"G
七、函数体中的指针或引用常量不能被返回 =2Ju)!%wr
\.P'8As
Char *func(void) (O ;R~Io
Q]/g=Nn
^~
{ tklS=R^Vn
k5&}bj-
char str[]=”Hello Word”; #5;4O{
SFWS<H(IN
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 5UL5C:3R9
`iuQ.I
return str; [9EL[}
#~*v*F~3
} 2wU,k(F_
}`whg8 fZ
函数体内的指针变量并不会随着函数的消亡而自动释放 'o]}vyz;
4xx?x/q
6wiuNGZb
八、一个内存拷贝函数的实现体 M9V,;*
bAY>o
void *memcpy(void *pvTo,const void *pvFrom,size_t size) k="wEZ;Q
L #vk77
{ W[!bF'-10
n\JSt}A
assert((pvTo!=NULL)&&(pvFrom!=NULL)); '&/Y}]
7B _Wz9y
byte *pbTo=(byte*)pvTo; //防止地址被改变 5;{*mJ:F
Xa8_kv_
byte *pbFrom=(byte*)pvFrom; @)ozgs@e
Wbmqf
s
while (size-- >0) vO{[P#L}
1iY?t
pbTo++ = pbForm++; Z_<Wr7D
-% B)+yq>
return pvTo; k<