一、#include “filename.h”和#include <filename.h>的区别 GdHFgxI
A[:0?Ez=
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 Cp4 U`]
ix2V?\
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 Wu3or"lcw*
g<pr(7jO
yNCd}
4Ym5
二、头文件的作用 [qbZp1s|(
4&%0%
加强安全检测 ,Ta k',
0M=A,`qk
通过头文件可能方便地调用库功能,而不必关心其实现方式 5My4a9
]!CMo+
KUJCkwQ
三、* , &修饰符的位置 *-uA\
'u@,,FFz[K
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 m31l[e
4Z8FLA+T,
U'~M(9uv:
四、if语句 [g)HoR=&
h</,p49gM
不要将布尔变量与任何值进行比较,那会很容易出错的。 8Of.n7{
\LuaI
整形变量必须要有类型相同的值进行比较 kU:ge
uoJ@Jt'j
浮点变量最好少比点,就算要比也要有值进行限制 6g*?(Y][
#aI(fQZe
指针变量要和NULL进行比较,不要和布尔型和整形比较 Me;XG?`
Q1kZ+b&
}2xgm9j<
五、const和#define的比较 +O$`8a)m
6roq 1=
const有数据类型,#define没有数据类型
V.w
L
}H#C<:A
个别编译器中const可以进行调试,#define不可以进行调试 ]@Z[/z%~04
%f)%FN.S
在类中定义常量有两种方式 %CoO-1@C
)FQxVT,.
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; cr,fyAvX
Qg6tJB
2、 用枚举代替const常量。 xAwP
af@R\"N9c
ZR]p7{8B
六、C++函数中值的传递方式 W3+;1S$k
%Ev)Hk
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) g)!d03Qoy
\jmT#Gt`9
void fun(char c) //pass by value u2G{I?
eI7FbOze
void fun(char *str) //pass by pointer F5|6* K
,MxTT!9Su
void fun(char &str) //pass by reference N%k6*FBp~
1webk;IM
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 |KHaL?
5mxYzu;#]
函数的类型不能省略,就算没有也要加个void 4iD-jM_D
&]'{N69@d?
s?8vs%(l
七、函数体中的指针或引用常量不能被返回 7)`U%}R
SCCBTpmf2B
Char *func(void) 2|KgRk|!
NYoh6AR
{ LK}Ih@f
&?R2zfcM
char str[]=”Hello Word”; 0GtL6M@pP
McRAy%{z
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 avmuI^LLs
_R,VNk
return str; '
DZYN {}
xpWx6
} O]\6Pv@N
mUmU_L u8
函数体内的指针变量并不会随着函数的消亡而自动释放 p5C:MA~*
4;]<#u
=q1=.VTn
八、一个内存拷贝函数的实现体 (aAv7kB&
<QlpIgr
void *memcpy(void *pvTo,const void *pvFrom,size_t size) G234UjN%
H]6i1j
{ J4yL"iMt
Fgf5OHX
assert((pvTo!=NULL)&&(pvFrom!=NULL)); kK27hfsw
-|ho
8alF
byte *pbTo=(byte*)pvTo; //防止地址被改变 >tUi ;!cQ
66P'87G
byte *pbFrom=(byte*)pvFrom; Q]9+-p(=
kYlsjM
while (size-- >0) 7,MDFO{n
qqL :#]lV5
pbTo++ = pbForm++; ne]P -50
M bj{C
return pvTo; fgiOYvIS2m
mv5=>Xc6
} \3M<_73
:bh#,]'
qXOWCYqs
九、内存的分配方式 y9K U&