一、#include “filename.h”和#include <filename.h>的区别 +XU$GSw3(
%0ll4"
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 eZ8Y"i\!y
{f@xA
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 XPc9z}/(e
*tq|x[<
o*O"\/pmF
二、头文件的作用 OH-~
F8|5_214'
加强安全检测 1+16i=BF)
6T{o3wc;
通过头文件可能方便地调用库功能,而不必关心其实现方式 L]/\C{}k
]X>QLD0W
+(QMy&DtS
三、* , &修饰符的位置 Q70**qm
>/kPnpJ
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 "6I-]:K-
P-E'cb%ub
VurP1@e&
四、if语句 `&|l;zsS
'-nuH;r
不要将布尔变量与任何值进行比较,那会很容易出错的。 Ovaj":L
3]:p!Y`$
整形变量必须要有类型相同的值进行比较 By51dk7
S5*~r@8h
浮点变量最好少比点,就算要比也要有值进行限制 c{]r{FAx9o
&9RW9u "
指针变量要和NULL进行比较,不要和布尔型和整形比较 p5twL
x8SM,2ud
_Cv[`e.
五、const和#define的比较 *uI hxMX
vUo.BA#;.b
const有数据类型,#define没有数据类型 v2Qc}o
t9f4P^V`
个别编译器中const可以进行调试,#define不可以进行调试 0aTEJX$iZ
,<^tsCI
在类中定义常量有两种方式 4t%:O4
3e
t]u(jX)
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; 3IJI5K_
T;4gcJPn"M
2、 用枚举代替const常量。 !7Yt`l$$z
lt2Nwt0bv
FkJ>]k
六、C++函数中值的传递方式 !Z+*",]_
5ykk11!p$
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) ard3yNQt
U!;aM*67
void fun(char c) //pass by value =7J|KoKK
:C|>y4U&(s
void fun(char *str) //pass by pointer g'}`FvADi
u]]5p[|S
void fun(char &str) //pass by reference [)J49
Vlp*'2VO
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 L?D~~Jb
iZkW+5(
函数的类型不能省略,就算没有也要加个void ;)=zvr17
|4p<T!T
X#Dhk6
七、函数体中的指针或引用常量不能被返回 ?,i#B'Z^
sS1J.R
Char *func(void) o7@4=m}
SqA+u/"j2
{ 1EAVMJ
*OGXu07 !
char str[]=”Hello Word”; Gwrx)Mq
p^zEfLTU
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 %<ptkZK#
^7s6J{<
return str; :#W>SO
zfr (dQ
} ?%za:{
Qq FfR#
函数体内的指针变量并不会随着函数的消亡而自动释放 xV n]m9i
Cs1%g
Nz>E#.++
八、一个内存拷贝函数的实现体 a`@<Z sR
jB/q1vFO
void *memcpy(void *pvTo,const void *pvFrom,size_t size) X_tW#`
o+)LcoPu
{ (;Q <@PZg
|q!2i
assert((pvTo!=NULL)&&(pvFrom!=NULL)); Ti@P4:q
dl7p1Cr
byte *pbTo=(byte*)pvTo; //防止地址被改变 jKCqH$
a9@l8{)RX
byte *pbFrom=(byte*)pvFrom; J,^pt Ql
K3r>nGLBo
while (size-- >0) P B6/<n9#
H:{(CY?t
pbTo++ = pbForm++; k+Ma_H`
i:Z.;z$1
return pvTo; Bn#HJ17/#
]N(zom_0d
} Dpp52UnTE
T`'3Cp$q
d$?n6|4
九、内存的分配方式 *l?%
o{
_"w!KNX>(~
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 I|3v&E1
T\e)Czz2-
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 s<r.+zqW
_ KkVI7a
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 x4m_(CtK
|_xiG~
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 "w|k\1D
IrwF
B
seD+~Y\z
十、内存分配的注意事项 xX4^nem\G
z`r4edk3
用new或malloc分配内存时,必须要对此指针赋初值。 M4hN#0("4
%CE@}
用delete 或free释放内存后,必须要将指针指向NULL ubC JZ"!
aXK%m
不能修改指向常量的指针数据 7quwc'!
r+#V{oE_
= cI\OsV&?
十一、内容复制与比较 Y`O}]*{>8R
1\608~ZH
//数组…… k}0
"6NNId|Y
char a[]=”Hello Word!”; M"$RtS|h
{u=\-|t
char b[10]; n$![b_)*
DwrCysIK
strcpy(b,a); ?e_}X3{
R?9Plzt5
if (strcmp(a,b)==0) K{w=qJBM
k;:u| s8NS
{} \FY De
XOU-8;d
//指针…… eg~^wi
q}A3"$-F
char a[]=”Hello Word!”; BK\~I
"$"mWF-
char *p; MVL }[ J
tAu|8aL
p=new char[strlen(a)+1]; B?YfOSF=5
"vRqtEBO@
strcpy(p,a); gMK3o8B/
dv9Pb5i
if (strcmp(p,a)==0) a5~C:EU0
.idl@%
{} 3{LvKe
+VW]%6+
?QIQ,?.
十二、sizeof的问题 <sFf'W_3{
x2&