一、#include “filename.h”和#include <filename.h>的区别 (mzyA%;W
`f(!i mN
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 fRbVc
TZ/u"' ZS
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 90q*V%cS
_*+M'3&=
Lczcz"t
二、头文件的作用 :r\<DVj
Tb}b*d3
加强安全检测 [=iq4F'7
f"[C3o2P
通过头文件可能方便地调用库功能,而不必关心其实现方式 (Fu9lW}n
d"V^^I)yx&
_|F h^hq
三、* , &修饰符的位置 3[c54S+(U
^Tl|v'
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 %T&kK2d;
qRr;&M &t_
M|\XFO
四、if语句 qU}[(9~Ru
Dx8^V%b
不要将布尔变量与任何值进行比较,那会很容易出错的。 y(%6?a @
)t|M)z J
整形变量必须要有类型相同的值进行比较 ].$N@tC
MQI6e".
浮点变量最好少比点,就算要比也要有值进行限制 ,Rf<6 /A
7 `|- K
指针变量要和NULL进行比较,不要和布尔型和整形比较 D;Z\GnD
dfNNCPu]+
RW3&]l=
五、const和#define的比较 s}5;)>3~@
wy7f7zIa
const有数据类型,#define没有数据类型 ?&[`=ZVn
rTx]%{
个别编译器中const可以进行调试,#define不可以进行调试 P:Bg()
/u?^s "C/
在类中定义常量有两种方式 n|8fdiK#}
/m%;wH|6%
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; 4kIy4x'*
OH&&d=~
2、 用枚举代替const常量。 oR5 'g7?
FN G]
um[.r,++
六、C++函数中值的传递方式 0Rj_l:d=
d!>PqPo
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) QqRL>.)W
W &*0F~
void fun(char c) //pass by value gg<lWeS/3
w'}b 8m(L
void fun(char *str) //pass by pointer Nkc=@l{
$[H3O(B0*
void fun(char &str) //pass by reference q>,i `*
1B 2>8N
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 #Hq XC\~n
JVN0];IL}
函数的类型不能省略,就算没有也要加个void xgfK0-T|[
Z/O5Dear/h
0DGXMO$;
七、函数体中的指针或引用常量不能被返回 T$SGf.-
-2f_e3jF
Char *func(void) Lb(=:Z!{
@<h@d_8^k
{ o4U9jU4<"
3d[fP#NY7
char str[]=”Hello Word”; *!vwW
T
li(g?|AD
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 |SCO9,Fs
w?Y;pc}1B
return str; 2WqjNqx)6
^`ny]3JA
} {ymD.vf=9+
K;Fy&p^d
函数体内的指针变量并不会随着函数的消亡而自动释放 rxt)l
?nE<Aig
uq'T:d
八、一个内存拷贝函数的实现体 {ZB7,\
86oa>#opU
void *memcpy(void *pvTo,const void *pvFrom,size_t size) "OkJPu2!W
Nvw'[?m
{ dxsPX=\:
|%Pd*yZA
assert((pvTo!=NULL)&&(pvFrom!=NULL)); udgf{1EB&2
"luMz;B
byte *pbTo=(byte*)pvTo; //防止地址被改变 kyMWO*>|
\s<L2uRj
byte *pbFrom=(byte*)pvFrom; T=%,^
`5:b=^'D/
while (size-- >0) RAPR-I;{
mSr(PIH{\
pbTo++ = pbForm++; PCtf&U