一、#include “filename.h”和#include <filename.h>的区别 P7.' kX9
.}B(&*9,v
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 }ns-W3B'
(R!hj w~
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 -0C@hM,wm
@-&MA)SN
T{+Z(L
二、头文件的作用 B<?wh0
3Ot~!AlR
加强安全检测 RY9V~8|M
|7k_N|E
通过头文件可能方便地调用库功能,而不必关心其实现方式 Jh&~ToF!
ZcJ\ZbE|
hk[
%a$Y
三、* , &修饰符的位置 Oz:
*LZ
r^Zg-|gr
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 Ztr Cv?
%]2,&
fHRMu:q
四、if语句 8s{?v&p
d5`3wd]]'v
不要将布尔变量与任何值进行比较,那会很容易出错的。 j|4C\~i
E>|: D
整形变量必须要有类型相同的值进行比较 Ho;X4lo[j
yQ,{p@#X8
浮点变量最好少比点,就算要比也要有值进行限制 V[o`\|<
7!WA)@6
指针变量要和NULL进行比较,不要和布尔型和整形比较 s$D ^ >0
6!'3oN{
ZyrI R
五、const和#define的比较 (xHf4[[u
9H-|FNz?c
const有数据类型,#define没有数据类型 %a+mk
E
>TkE~7?l
个别编译器中const可以进行调试,#define不可以进行调试 6 5N~0t
#X 52/8G
在类中定义常量有两种方式 j)C,%Ol
?W^c4NtP
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; UcOk3{(z$q
R\@/U=iqR
2、 用枚举代替const常量。 /1mW|O>0
,I1RV
0j"8@<
六、C++函数中值的传递方式 }X*Riu7gk
[Zei0O
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) Ms~{9?
E;JsBH
void fun(char c) //pass by value +LM#n#T
hd),&qoW?
void fun(char *str) //pass by pointer u!"t!2I
_8Kx6s%
void fun(char &str) //pass by reference AP77a*@8
OxI/%yv-c
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 QnZcBXI8
|7yAX+
函数的类型不能省略,就算没有也要加个void P9g en6
V=:'SL*3|
i;LXu%3\
七、函数体中的指针或引用常量不能被返回 z 9FfU
g35DV6
Char *func(void) Tq]Sn]CSP
=jB08A
{ wr[,
At7>V-f}
char str[]=”Hello Word”; &l3iV88
Oo"^%F~%
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 Ag{iq(X
d&ex5CU5
return str; ^*P%=>zO
&|f@$ff
} 8GvJ0Jq}U
rM'=_nmi
函数体内的指针变量并不会随着函数的消亡而自动释放 5R(/Uiv3F
\,u_7y2 c
sZx/Ee
八、一个内存拷贝函数的实现体 IiY/(N+J
D6>HN[D"
void *memcpy(void *pvTo,const void *pvFrom,size_t size) (h>-&.`&
$2W%2rZ
{ 5$V_Hj
:yUEkm8
assert((pvTo!=NULL)&&(pvFrom!=NULL)); j#cYS*^H
sBr_a5QQ#
byte *pbTo=(byte*)pvTo; //防止地址被改变 $0vb^
o4|M0
byte *pbFrom=(byte*)pvFrom; W[Ls|<Q
N<~t3/Nm
while (size-- >0) 0g+'/+Ho 4
SHe49!RA'{
pbTo++ = pbForm++; _lamn}(x0
xai*CY@cQ
return pvTo; ogyTO|V=
d3D] k,
} 3j\1S1
etTn_v
\O2Rhz
九、内存的分配方式 3B84^>U<
U4d:] z
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 IZpP[hov
vEJWFoeEFm
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 vX/T3WV
C
uB`CI
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 #ZB~x6i6
Yt;MV)
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 wOU_*uY@6'
ML|FQ
02c':a=7
十、内存分配的注意事项 RZXjgddL
\G*0"%!U
用new或malloc分配内存时,必须要对此指针赋初值。 =ALTUV3/q
bbE!qk;hEP
用delete 或free释放内存后,必须要将指针指向NULL ?l9XAWt\
D]zwl@sRX:
不能修改指向常量的指针数据 8X[:j&@
U/!TKic+
37s0e;aF
十一、内容复制与比较 ,J+}rPe"sf
'uBu6G
//数组…… 4y|BOVl
$g>IyT[
char a[]=”Hello Word!”; aAD^^l#
]n6#VTz*
char b[10]; ]s<[D$ <,
t'n pG}`tE
strcpy(b,a); -XB/lnG
A^USBv+9`
if (strcmp(a,b)==0) JMC. w!
fp`;U_-&0
{} ;ub;lh 3
+S o4rA*9
//指针…… Ayxkv)%:@)
ZOh`(})hy
char a[]=”Hello Word!”; QIG$z?
EJMM9(DQ7
char *p; 0XE4<U
eA2@Nkw~)
p=new char[strlen(a)+1]; ofm#'7P 0
NPy&O