一、#include “filename.h”和#include <filename.h>的区别 2d[q5p
V/ G1C^'/
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 73cb1kfPd
Trv}YT.
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 :W*yfhLt
xSmG,}3mF
)}@D\(/@
二、头文件的作用 ~v;I>ij
-qIi.]/f"9
加强安全检测 kw#X,hP
(u@:PiU/eP
通过头文件可能方便地调用库功能,而不必关心其实现方式 aj&L
Z DD6
.dlsiBh
+;KUL6
三、* , &修饰符的位置 6dIPgie3w
3CoZ2
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 hu}$ \
e"S?qpJK
P51M?3&=l
四、if语句 I`V<Sh^Qd
ccag8LC
不要将布尔变量与任何值进行比较,那会很容易出错的。 %;'~TtW5
t`Z'TqP R
整形变量必须要有类型相同的值进行比较 %GhI0F #
1Toiqb/
浮点变量最好少比点,就算要比也要有值进行限制 >3uNh:|>/
,eyh%k*hz
指针变量要和NULL进行比较,不要和布尔型和整形比较 8_('[89m
O
k`}\NZL
yJ $6vmQ
五、const和#define的比较 _re# b?
Jl~ *@0(
const有数据类型,#define没有数据类型 Dp([r
X0;u7g2Yz
个别编译器中const可以进行调试,#define不可以进行调试 =0ZRGp
!?P8[K
在类中定义常量有两种方式 xuK"pS
\?xM%(:<Q
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; 3a?-UT!
)^ah, ;(
2、 用枚举代替const常量。 [CJ<$R !
!O_G%+>5W
U]cXE1c>F
六、C++函数中值的传递方式 qbv\uYow3k
7iP+!e}$.
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) o}rG:rhIh
cRT'?w`}
void fun(char c) //pass by value -5<[oBL;
|R}=HsYey
void fun(char *str) //pass by pointer B6
0
e(0OZ_ w
void fun(char &str) //pass by reference Ehx9-*]
<fUo@]Lv
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 S^rf^%
`8!9Fp
函数的类型不能省略,就算没有也要加个void ) E^S+ps
[YOH'i&X
7}kJp%-
七、函数体中的指针或引用常量不能被返回 ! ?g+'OM
ix!xLm9\
Char *func(void) FzInIif
*fg2bz<~[B
{ 28!C#.(h
pa>C}jk}6
char str[]=”Hello Word”; 53i]Q;k [
5CY%h
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 [neuwdN
gNCS*a
return str; uM2@&)u
AF'<
} mku@n;Hl_
v;]rFc#Px[
函数体内的指针变量并不会随着函数的消亡而自动释放 $mQ0w~:@
T8^9*]:@c!
f^F;`;z
八、一个内存拷贝函数的实现体 V
0Bl6
>d + }$dB
void *memcpy(void *pvTo,const void *pvFrom,size_t size) b$_81i
P[3i!"O>
{ = ~1EpZ
r:H]`Uo'r
assert((pvTo!=NULL)&&(pvFrom!=NULL)); c{M
,K
>#]A2,
byte *pbTo=(byte*)pvTo; //防止地址被改变 sO.MUj;
gm9*z.S\'
byte *pbFrom=(byte*)pvFrom; 0kE[=#'.'
i7Qb~RW
while (size-- >0) KQ\K:#
QG5WsuT
pbTo++ = pbForm++; <*(Z}p
Kip&YB%rk
return pvTo; o[ 5dR<
MmT/J1zM
} I*u3e
*9'3 `^l
0S{23L4C
九、内存的分配方式 =5|7S&{
p<fCGU
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 TLwxP"
RjWwsC~B
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 V^_A{\GK
{-Y;!
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 :iE b^F}
@](vFb
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 !T0I; j&
6K.2VY#
:HY$x
十、内存分配的注意事项 JS/'0.
fL*7u\m:
用new或malloc分配内存时,必须要对此指针赋初值。 HI8mNX3 "j
'`jGr+K,wU
用delete 或free释放内存后,必须要将指针指向NULL :v^/k]S
-XBZ1q
不能修改指向常量的指针数据 !5ps,+o
Os9SfL
/QXUD.(
8
十一、内容复制与比较 3xyrWl
<h#*wy:o2
//数组…… 5u$.!l8Nl
$_.t'8F
char a[]=”Hello Word!”; 5Tl5T&
b| L;*<KU
char b[10]; o~LJ+m6-)
]_s3<&R
strcpy(b,a); J^7m?mA
:c*"Dx'D
if (strcmp(a,b)==0) 2-4N)q
&_L@hsm
{} Ju+3}
|*bUcS<S
//指针…… tYjG8P#
}_+XN"}C
char a[]=”Hello Word!”; !*#9b
[Sm<X
char *p; t'44X
@O#!W]6NT6
p=new char[strlen(a)+1]; Cut~k"lv
>_}isCd,
strcpy(p,a); 65LtCQ}
*;A ;)'
if (strcmp(p,a)==0) D \ rns+
"| '~y}v_
{} dseI~}
ZLQmEF[>
i~u4v3r=
十二、sizeof的问题 0%f}Q7*R
u({^8: AYu
记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节 PxKBcx4o`
aT0~C.vT
char a[]=”Hello World!” 2C
S9v
un "I
char *p=a; lSX1|,B7:]
L.;b(bFe
count<<sizeof(a)<<end; //12字节 fK/:
iYXD }l;r
count<<sizeof(p)<<endl; //4字节 m212
gc0u
vXKL<