一、#include “filename.h”和#include <filename.h>的区别 fCEd
:Kr
?{{E/J:%
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 X]y 3~|K
rM>&!?y+
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 ;'J L$=
/=7 |FtB`
"#e2"=3*
二、头文件的作用 XTZWbhNF
@}fnR(fS
加强安全检测 LGod"8~U
xn}'!S2-b
通过头文件可能方便地调用库功能,而不必关心其实现方式 CB?.|)Xam
~@got
VT'$lB%IK
三、* , &修饰符的位置 D4o?
K= 06I
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 Y6{p|F?&"
jh8%Xu]t
@ju-cv+
四、if语句 ZU "y<
%
qAhETZ%
不要将布尔变量与任何值进行比较,那会很容易出错的。 _f34p:B%s
Th,2gX9
整形变量必须要有类型相同的值进行比较 UI;!_C_
hj4A&`2
浮点变量最好少比点,就算要比也要有值进行限制 9lA YCsX
?hDEFW9&^x
指针变量要和NULL进行比较,不要和布尔型和整形比较 \vm'D'9
c#{<|
.
F1%'
zsv
五、const和#define的比较 ih~c(&n0
-F5U.6~`!
const有数据类型,#define没有数据类型 ) mv}u~
lbv, jS
个别编译器中const可以进行调试,#define不可以进行调试 k?xtZ,n{s
Bpk%,*$*)
在类中定义常量有两种方式 _BW$?:)9
gB~SCl54
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; 88G[XkL$2
;=uHK'{
2、 用枚举代替const常量。 rx^pGVyg
eJy@N
IOmIkx&`GP
六、C++函数中值的传递方式 4>5%SzZT\3
-,5g cD
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) K5w22L^=+
_=}Y
lR
void fun(char c) //pass by value H56e#:[$
qw_qGgbl
void fun(char *str) //pass by pointer _n{N3da
%8 4<@f&n]
void fun(char &str) //pass by reference '`3-X];p
Ogjjjy84vM
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 S2fw"1h*x
)Ba^Igb}
函数的类型不能省略,就算没有也要加个void ~:+g+Mf~[
.3HC*E.e
PfuYT_p4s
七、函数体中的指针或引用常量不能被返回 /n"A%6S
J v)]7u
Char *func(void) (.n"
J2qj
_$=xa6YA
{ "[#jq5>
:
F48`1+
char str[]=”Hello Word”; N!Y'W)i16
/pyKTZ|
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 FAQ:0L$G
crhck'?0
return str; xaeY^"L
nh E!Pk
} \XB71DUF
::M/s#-@
函数体内的指针变量并不会随着函数的消亡而自动释放 zBjqYqZ<+
h_A}i2/{
LRbevpZ,
八、一个内存拷贝函数的实现体 WO}JIExy
uF^+}Y ZT
void *memcpy(void *pvTo,const void *pvFrom,size_t size) C ch1"j<k$
mIr{Wocx
{ XhIgzaGVu
^ePSI|EW
assert((pvTo!=NULL)&&(pvFrom!=NULL)); 0kiW629o
Rw.
Uz&
byte *pbTo=(byte*)pvTo; //防止地址被改变 3]c<7vdl
,cm2uY
byte *pbFrom=(byte*)pvFrom; @Sv
?Ar
PD/~@OsxU
while (size-- >0) ]gmf%g'C
e=F'
O]
5
pbTo++ = pbForm++; i_=P!%,
Stp??
return pvTo; gK%&VzG4
U2Ur N?T
} eg,S(;VEt
Jl9T[QAJn1
2ag]p
九、内存的分配方式 chiQ+
riBT5
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 glv(`cQ
>c1mwZS;
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 $9l3DJ
0`S!+d
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 E|5gKp-wJ
c?opVbJB\
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 TY8 8PXW
?]7ITF
6f{ c
十、内存分配的注意事项 l"cO@.T3
\dfq&oyU\
用new或malloc分配内存时,必须要对此指针赋初值。 VK NCK
U2bb|6j
用delete 或free释放内存后,必须要将指针指向NULL ,3Wa~\/Q
]&9f:5',
不能修改指向常量的指针数据 Z
v~
A9bB
Ik}*7D
O=-|b kO
十一、内容复制与比较 T}\U:@b
&O%Kj8)
//数组…… ;nC+Kz:
J%[K;WjrZJ
char a[]=”Hello Word!”; WUHx0I
c/hml4
char b[10]; kQH!`-n:T
@RnG K 5
strcpy(b,a); 3s|tS2^4
r7IhmdA
if (strcmp(a,b)==0) L~yy;)]W
~pF'Qw"z|
{} o+ tY[UX
[@\f 0R
//指针…… OsK=% aDpj
]Wy V bIu
char a[]=”Hello Word!”; NuP@eeF>,
]-AT(L>
char *p; Z6
aT%7}}
tRXM8't
p=new char[strlen(a)+1]; >PYe"
wo_FM
`@
strcpy(p,a); a;h:o>Do5
o%|1D'f^
if (strcmp(p,a)==0) K]7@%cS
>Ek`PVPD
{} k(7!W
>*_?^F_
_>aesp%
十二、sizeof的问题 vw(};)8
'/"( `f,
记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节 cdh1~'q/
\J13rL{<
char a[]=”Hello World!” a1}W2;W0]g
Z>D7C?v:(
char *p=a; 4,aBNuxWd
PuOo^pFhH
count<<sizeof(a)<<end; //12字节 #h&?wE>
cX&c% ~
count<<sizeof(p)<<endl; //4字节 cfj6I
T&S<