一、#include “filename.h”和#include <filename.h>的区别 y!#-[K:
1|MRXK
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 5daq}hsQs
3PNdc}h
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 )!"fUz$
al9wNtMT
|3'
二、头文件的作用 nqyD>>
'o-4'
加强安全检测 7)lEZJK&T
j]BRf A
通过头文件可能方便地调用库功能,而不必关心其实现方式 5?7AzJl>
=u<:'\_
nq M7Is
三、* , &修饰符的位置 3v8LzS3@
DzAZv/h76
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 ?_NKyiu95
dJ"M#X!Zu
v-{g
四、if语句 v-1}&K
BO[:=x`
不要将布尔变量与任何值进行比较,那会很容易出错的。 yix[zfQt0
QKG3>lU
整形变量必须要有类型相同的值进行比较 ;g|Vt}a&4
hYW9a`Ht/
浮点变量最好少比点,就算要比也要有值进行限制 3z8i0
'C[tPP
指针变量要和NULL进行比较,不要和布尔型和整形比较 ^m qEKy<
UkL1h7}a\
ax&?Z5%a
五、const和#define的比较 6cH8Jr _
<3;p>4gN
const有数据类型,#define没有数据类型 ;k <dp7^
1R2IlUlzFr
个别编译器中const可以进行调试,#define不可以进行调试 2e`}O
6_j |@
在类中定义常量有两种方式 VfoWPyWD#
FZHA19Kb
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; P%3pM*.
y\?ey'o
2、 用枚举代替const常量。 g>lZs
5'zXCHt
EW
`hL~{
六、C++函数中值的传递方式 AC,RS7
or]v]*:~l
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) J&xZN8jW
Yuvi{ 0
void fun(char c) //pass by value 7r:h_r-
YF5}~M ymF
void fun(char *str) //pass by pointer !}&|a~U@`k
}HgG<.H>
void fun(char &str) //pass by reference I|@+O#
] ,|,/~
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 1JJsYX
}p)K6!J0
函数的类型不能省略,就算没有也要加个void D-gH_ff<]9
Kj4/fB
\@<7Vo,
七、函数体中的指针或引用常量不能被返回 At Wv9
lTx_E#^s
Char *func(void) &,nv+>D
1!#N-^qk
{ S=UuEmU5N
&.)=>2
char str[]=”Hello Word”; RTOA'|[0M
VBhUh~:Om
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 9[0iIT$q$
ZEqW*piI
return str; /$~1e7W
FQZ*i\G>>
} 7({)ou x
yaUtDC.|
函数体内的指针变量并不会随着函数的消亡而自动释放 !=[Y yh
Y
;Ym=n'
>*-%:ub
八、一个内存拷贝函数的实现体 &o:5lxR{
R/hf"E1
void *memcpy(void *pvTo,const void *pvFrom,size_t size) 3jx%]S^z|
HbTVuf o
{ Bkcwl
({uW-%
assert((pvTo!=NULL)&&(pvFrom!=NULL)); xl}rdnf}
LmrdVSs_
byte *pbTo=(byte*)pvTo; //防止地址被改变 {:X'9NEE
1By tu >2
byte *pbFrom=(byte*)pvFrom; J%&LQ