一、#include “filename.h”和#include <filename.h>的区别 :
utY4
8K: RoR
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 bI~ R6o
Y+il>.Z
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 u6hDjN
{Ju
)8`7i{F
二、头文件的作用 y|r+<
R*Jnl\?>@
加强安全检测 K9{3,!1
aYTVYg
通过头文件可能方便地调用库功能,而不必关心其实现方式 ^L}ICm_#
"R8: s
Ul"9zTH
三、* , &修饰符的位置 w>-@h>Ln
[ .]x y
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 5%H(AaG*q
!,D7L6N
a%\6L
四、if语句 % zP]z
,4kly_$BH
不要将布尔变量与任何值进行比较,那会很容易出错的。 c6v@6jzx0Y
&(M][Uo{|'
整形变量必须要有类型相同的值进行比较 -D=J/5L#5
GYvD*?uBc
浮点变量最好少比点,就算要比也要有值进行限制 h"~i&T
h
m9yi:zT%
指针变量要和NULL进行比较,不要和布尔型和整形比较 ?'RB)M=Og7
E?\&OeAkO
n7Em
t$Hi>
五、const和#define的比较 GnAG'.t-Z
rGa@!^hk
const有数据类型,#define没有数据类型 Ck`-<)uN
E}^np[u7
个别编译器中const可以进行调试,#define不可以进行调试 w ;;yw3
^\<nOzU?
在类中定义常量有两种方式 \X3Q,\H
@
JONfNb+
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; X#;n Gq)5
4XL$I*;4
2、 用枚举代替const常量。 zL8Z8eh">
"LwLTPC2
'6^+|1
六、C++函数中值的传递方式 \"]KF8c^_
KGM9
b
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) VT>TmfN(I
]~a;tF>Fw
void fun(char c) //pass by value &%@e6..Ex
rV{:'"=y-
void fun(char *str) //pass by pointer l=|>9,La
TJYup%q
void fun(char &str) //pass by reference rcq^mPdQ
G909R>
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 EY$Dtb+g8
pm2-F]
函数的类型不能省略,就算没有也要加个void QoLp$1O(y
?L K
n
B#Q` !B4v
七、函数体中的指针或引用常量不能被返回 I{bDa'rX
C~e&J&zh
Char *func(void) _#\e5bE=Z
fyt ODsb>
{ /Pbytu);ds
tLH:'"{zx
char str[]=”Hello Word”; m!22tpb
%
w\
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 K#"J8h;x
uez"{ _I
return str; b]0]*<~y
LDDgg
u
} >m$jJlAv8
/Dd.C<F
函数体内的指针变量并不会随着函数的消亡而自动释放 W8blHw"
bk(q8xR`
L/J1;
八、一个内存拷贝函数的实现体 5taR[ukM
%*}h{n
void *memcpy(void *pvTo,const void *pvFrom,size_t size) h+gaKh=k+
N_:H kI6
{ bA_/6r)u
%IA1Y>`
assert((pvTo!=NULL)&&(pvFrom!=NULL)); }4uHT.)
v9,<2
byte *pbTo=(byte*)pvTo; //防止地址被改变 us5<18M5
T\ *#9a
byte *pbFrom=(byte*)pvFrom;
A
".v+
@d&JtA
while (size-- >0) TS_5R>R3
<<=.;`(/v
pbTo++ = pbForm++; 8AjQPDn+
f]pHJVgFV
return pvTo; 9T\uOaC"
@$Xl*WT7
} VGYx(
k~0#Iy_{M
%nS(>X<B
九、内存的分配方式 eS`ZC!W
elqm/u
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 bI-uF8"
{gC?kp
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 CL|d>
"[QQ(]={
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 uGmv`R_
<~ Dq8If
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 ?v
z[Zi
a
Xn:hn~O
AqA.,;G
十、内存分配的注意事项 >]L\B w
xA'RO-a}h
用new或malloc分配内存时,必须要对此指针赋初值。 :'
=le*h
dEhFuNO<2
用delete 或free释放内存后,必须要将指针指向NULL 0$qK: ze
G$^u2wz.
不能修改指向常量的指针数据 WaPuJ5;e
&gg Om
*V`E)maU
十一、内容复制与比较 <.Dg3RH
U!GfDt
//数组…… 3v91 yMx
.rwa=IW
char a[]=”Hello Word!”; >vR7l&"
34
'[O
char b[10]; MpVZL29)
b$eN]L
strcpy(b,a); 43}uW,P
[Ot<8)Jm
if (strcmp(a,b)==0) &s(mbpV
h ^.jK2I
{} O[|_~v:^
`Hx JE"/
//指针…… _ea|E 8
)Z*nm<=
char a[]=”Hello Word!”; N;HG@B!m
-kP$S qR~
char *p; y]okOEV0
S l`F`
p=new char[strlen(a)+1]; F-XL
Kr'Yz!
strcpy(p,a); p[K!.vOt+
tZ.hSDH
if (strcmp(p,a)==0) z41v5rB4
?{;7\1[4
{} IkuE |
X%98k'h.y
?orLc,pU^
十二、sizeof的问题 ^H!45ph?Jc
qoP/`Y6
记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节 ]i/Bq!d l
/,yRn31[
char a[]=”Hello World!” Zet80|q
|\U 5m6 q
char *p=a; r h c&