一、#include “filename.h”和#include <filename.h>的区别 #w[q.+A
!c3Qcva
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 X}ey0)g%
loAfFK>g
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 (dw3'W
hv_pb#1Ks
0Te)s3X
二、头文件的作用 S.?\>iH[
|>m# m*{S
加强安全检测 ?ZD{e|:u
rVc
zO+E
通过头文件可能方便地调用库功能,而不必关心其实现方式 NG4eEnic!a
QqT6P`0u
&eLQ;<qO*|
三、* , &修饰符的位置 %m0L!|E
;RTrRh0v
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 0|qx/xo|-
]-+.lR%vd9
D:S6Mu
四、if语句 Gff[c%I
hA&j?{
不要将布尔变量与任何值进行比较,那会很容易出错的。 UGezo3}
H_xQ>~b
整形变量必须要有类型相同的值进行比较 ~Iu21Q(*
D{3 x}5
浮点变量最好少比点,就算要比也要有值进行限制 %s&E-*X
&,6y(-
指针变量要和NULL进行比较,不要和布尔型和整形比较 t8a@L(J$
3HDnOl8t
._F6- pl
五、const和#define的比较 ft.}$8vIT
~L Bq5a
const有数据类型,#define没有数据类型 VAG+y/q
zN8&M<mTl
个别编译器中const可以进行调试,#define不可以进行调试 :p*ojl|
dcc%G7w
在类中定义常量有两种方式 >(1_Dn\
d"e%tsj
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; OL6xMToP
Xk$l-Zfse
2、 用枚举代替const常量。 Ot8S'cB1,$
%o_0M^3W
g)|++?
六、C++函数中值的传递方式 ?AM8*w
:w&)XI34
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) ~*Sbn~U
%I2xK.8=
void fun(char c) //pass by value &xMJ^Nv
X?k V1
void fun(char *str) //pass by pointer 4q2=:"z4
M}KM]<
void fun(char &str) //pass by reference <^X'f
fuIv,lDA
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 \Z7([G h
o\:f9JL
函数的类型不能省略,就算没有也要加个void 7! A%6
f 7QUZb\
eL$U M
七、函数体中的指针或引用常量不能被返回 Kr}M>hF+|
c#4L*$ViF
Char *func(void) B$[%pm`'2
$y]||tX
{ ?}lp o; $
~IJZM`gN
char str[]=”Hello Word”; >7v.`m6?H
g cK"
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 N@du.d:
1p"EE~v
return str; nluyEK
4\eX=~C>:
} :pF]TY"K.
O]r3?=
函数体内的指针变量并不会随着函数的消亡而自动释放 la"A$Tbu~
G*wW&R)
re 1k]
八、一个内存拷贝函数的实现体 g:3'x/a1
A>1p]#
void *memcpy(void *pvTo,const void *pvFrom,size_t size) ]38<ly7
j7HlvoZV
{ ~RLx;
))+98iU1s
assert((pvTo!=NULL)&&(pvFrom!=NULL)); <[B[
=rO>b{,hs
byte *pbTo=(byte*)pvTo; //防止地址被改变 o:Os_NaD
{@F["YPxy
byte *pbFrom=(byte*)pvFrom; 5`{;hFl
7[.Q.3FL
while (size-- >0) i11GW
,5+X%~'
pbTo++ = pbForm++; j'Q-*-3
{'Qk>G
s
return pvTo; "i<3}6/*
MHT,rqG
} sq(063l
en#g<on
)PoI~km
九、内存的分配方式 Y1ilH-8
S%gO6&^
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 OFL+Q~~C
j6d"8oH
_
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 byj mH
V-U
^O45
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 lX k-86[M
2WECQl=r
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 a:%5.!Vd
hv8[_p`>
{hq ;7
十、内存分配的注意事项 ci NTYow
j[ZniD
用new或malloc分配内存时,必须要对此指针赋初值。 xW;[}t-QS
}br<2?y,
用delete 或free释放内存后,必须要将指针指向NULL o/[yA3^
8\V>6^3CD$
不能修改指向常量的指针数据 e]B<