一、#include “filename.h”和#include <filename.h>的区别 q;../h]Ne
7Y|>xx=v
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 %4|}&,%%r
bC>>^?U1m
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 Ya&\ly
/i
e4YfTr
.V 3X#t
二、头文件的作用 2}`V c{\
w4fJ`,
加强安全检测 /zG-\e U
'x,GI\;?
通过头文件可能方便地调用库功能,而不必关心其实现方式 XJlDiBs9=Q
qe6C|W~n
a EFe!_QY
三、* , &修饰符的位置 QV'3O|
:Bv&)RK
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 ;TV'PJ
%<J(lC9,C
`YmI'
四、if语句 Q0q)n=i}]
)'
x/q
不要将布尔变量与任何值进行比较,那会很容易出错的。 H&yFSz}6a
~b$z\|Y
整形变量必须要有类型相同的值进行比较 xL39>PB
A.$VM#
浮点变量最好少比点,就算要比也要有值进行限制 RZ)vU'@kx
1f@U:<:
指针变量要和NULL进行比较,不要和布尔型和整形比较 uWR,6\_jY
HDSA]{:sl
z@%/r~?|
五、const和#define的比较 ~Miin
{F(-s"1;xO
const有数据类型,#define没有数据类型 Q9eYF-+
m['v3m:
个别编译器中const可以进行调试,#define不可以进行调试 01-\:[{
q(&^9"
在类中定义常量有两种方式 _]=TFz2O
DNm7z[t{
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; X$uz=)
C;)Xwm>e
2、 用枚举代替const常量。 w*6!?=jP
gB{]yA"('
zy5s$f1IA
六、C++函数中值的传递方式 `hK>bHj
P$(WdVG
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) !4 4mT'Y
]U#[\ Z
void fun(char c) //pass by value e}?1T7NPG]
2{sD*8&`
void fun(char *str) //pass by pointer 3lLW'g&=
"u Of~e"
void fun(char &str) //pass by reference j:v~MrQ7|
VNr
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 Z/NGv
e}](6"t`5
函数的类型不能省略,就算没有也要加个void x ^M5D+o
qL%.5OCn(
Yhc6P%{Z^
七、函数体中的指针或引用常量不能被返回 =qV4Sje|q
as\<nPT{Fj
Char *func(void) {.aK{
V
I8<Il^
{ !7mvyc!'!
>}dTO/
char str[]=”Hello Word”; koncWyW
<K DH
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 Nl=m'4@`
]=?X*,'
return str; PS_3Oq)
gtaV6sD
} Qm35{^p+
G|QUujl
函数体内的指针变量并不会随着函数的消亡而自动释放 #L@} .Giz
pW*{Mx
vi[#?;pkF
八、一个内存拷贝函数的实现体 1R'u v4e
3:]{(@J
void *memcpy(void *pvTo,const void *pvFrom,size_t size) PZ
)XmCy"xx
{ AkYupP2]v
G8^0^@o
assert((pvTo!=NULL)&&(pvFrom!=NULL)); ":UWowJO
2X qTyf<
byte *pbTo=(byte*)pvTo; //防止地址被改变 _Hz~HoNU
?
-v
byte *pbFrom=(byte*)pvFrom; ,h%D4EVx
'2Q.~6
while (size-- >0) J<