一、#include “filename.h”和#include <filename.h>的区别 *^Ro I
{?q`9[Z
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 mwMu1#
+p&zM3:9w
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 a^\F9^j
pNZ3vTs6
^=a:{["@!
二、头文件的作用 A-d<[@d0
Z78i7k }
加强安全检测 Sy]W4%
_v(5vx_
{
通过头文件可能方便地调用库功能,而不必关心其实现方式 #s' `bF^
cm!|A?-<
.l|29{J
三、* , &修饰符的位置 stMxlG"d
!1K.HdK
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 NJmx(!Xsh
vE1:;%Q
H= w6
四、if语句 SrGJ#K&%
L,!\PV|
不要将布尔变量与任何值进行比较,那会很容易出错的。 0 d+b<J,
_
nz^+
整形变量必须要有类型相同的值进行比较 @=2u;$.
Hzc}NyJ
浮点变量最好少比点,就算要比也要有值进行限制 }x&XvI
}gFa9M<
指针变量要和NULL进行比较,不要和布尔型和整形比较 b4EUrSL
6G#[Mc yn
`t44.=%
五、const和#define的比较 ;#+I"Ow
]HB1JJiS~
const有数据类型,#define没有数据类型 BG)zkn$
`z.sWF|f!O
个别编译器中const可以进行调试,#define不可以进行调试 Q&lb]U+\u
)A6=P%;}>I
在类中定义常量有两种方式 &/:c?F?l
C1(RgY|
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; &
P%#
,izp^,`
2、 用枚举代替const常量。 {<a)+S.6U
sva-Sd8
\gK'g-)}
六、C++函数中值的传递方式 xwW(WHdC]
!I\eIV>0b
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) +>AVxV=A#
K>5bb
void fun(char c) //pass by value LN5BU,4=
F_i"v5#
void fun(char *str) //pass by pointer #f;6Ia>#
_|4QrZ$n(
void fun(char &str) //pass by reference .r&CIL>
1f1D^|
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 IwS<p-
h?h)i>
函数的类型不能省略,就算没有也要加个void ueg%D+u
#T8jHnI
eu8a<
七、函数体中的指针或引用常量不能被返回 st~l||
7]Hf3]e>/
Char *func(void) LNrM`3%2-
#%8)'=1+4?
{ L]Xx-S
pAqPHD=
char str[]=”Hello Word”; O*lIZ,!n
<AiE~l| D
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 b6H7>x
Ao*:$:k
return str; XR p60i6f
lqgR4 !
} N)a5~<fBG
T00sYoK
函数体内的指针变量并不会随着函数的消亡而自动释放 ~IPATG
U%Hcck'
.W$9nbly
八、一个内存拷贝函数的实现体 :Ig9n:
YHke^Ind
void *memcpy(void *pvTo,const void *pvFrom,size_t size) (CtRU
xRO9o3
{ Snn4RB<(
3u 7A(
assert((pvTo!=NULL)&&(pvFrom!=NULL)); ?)-anoFyVW
?' mP`9I
byte *pbTo=(byte*)pvTo; //防止地址被改变 W5()A,R
f_;tFP
B
byte *pbFrom=(byte*)pvFrom; ?B)e8i<[f
)7-mALyW
while (size-- >0) WP Gp(Xw
PI9aKNt
pbTo++ = pbForm++; wr(*RI"
O<mA+yk
return pvTo; C
OL"/3r
+z#+}'mT%
} *lu*h&Y