一、#include “filename.h”和#include <filename.h>的区别 >Q5et1c
S$~T8_m^U
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 muh[wo
sIUhk7Cd8
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 =E6ND8l@2
;a"g<v
52X[{
二、头文件的作用 t zn1|
j<"@Y7
加强安全检测 Z^tTR]u\$
O52B
通过头文件可能方便地调用库功能,而不必关心其实现方式 pco:]3BF6
'e&L53n
p**Sd[|
三、* , &修饰符的位置 l k~VvRq
/thFs4
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 dC'8orFG+
f.yvKi.Cm
Qy4eDv5
四、if语句 wh Hp}r
o,r72>|
不要将布尔变量与任何值进行比较,那会很容易出错的。 >X@4wP7l
g=#Cc(
q
整形变量必须要有类型相同的值进行比较 a/wg%cWG_
V ,+&.A23
浮点变量最好少比点,就算要比也要有值进行限制 53X i)
Lm-f0\(
指针变量要和NULL进行比较,不要和布尔型和整形比较 _cc37[
CMhl* dH
v[Mh[CyB
五、const和#define的比较 %LM2CgH
V
$.Ia;YBf
const有数据类型,#define没有数据类型 at|.Q*&a#
&0*7]Wo*
个别编译器中const可以进行调试,#define不可以进行调试 wiFA3_\G
7|@FN7]5NF
在类中定义常量有两种方式 ge#0Q L0K
9kzJ5}
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; R+*-i+]Q#7
~XeWN^l(Ov
2、 用枚举代替const常量。 ZGw6Bd_I
~0@uR
u5.zckV
六、C++函数中值的传递方式 ).32Im!;#R
>qy$W4
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) ]."t
|4C5;"P c
void fun(char c) //pass by value +Pc2`,pw|
Fy*t[>
void fun(char *str) //pass by pointer ^/ff)'.J
F05]6NVv
void fun(char &str) //pass by reference 7](aPm8
v8"Zru
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构
\4j(el
A I v
函数的类型不能省略,就算没有也要加个void >:bXw#w]
2Rqpok4
_<6E>"*m
七、函数体中的指针或引用常量不能被返回 Yc:>Yzj(z
(kVxa8 0
Char *func(void) `.g'bZ<v/
&s{d r
{ yR% l[/ X
c;,-I
char str[]=”Hello Word”;
6`@6k2]
7/HX!y{WP
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 ~bqw !rz
,`8:@<e
return str; *EPJeblAV
Cb6K!5[q]
} t=\
ffpA
Jz]OWb *
函数体内的指针变量并不会随着函数的消亡而自动释放 F@KtRUxE
R].xT-1
19:1n]*X<
八、一个内存拷贝函数的实现体 ,*sKr)9)
b%h.>ij?
void *memcpy(void *pvTo,const void *pvFrom,size_t size) _4
YT2k
EeQ2\'t
{ oT!i}TW?o
kZ0z]Y
assert((pvTo!=NULL)&&(pvFrom!=NULL)); 5,BvT>zFY
jItVAmC=i
byte *pbTo=(byte*)pvTo; //防止地址被改变 \.?'y71
6n\){dkZ~
byte *pbFrom=(byte*)pvFrom; `Bb32L
~wu\j][2
while (size-- >0) !Ld[`d.|R!
w^ X@PpP
pbTo++ = pbForm++; u
p]>UX8
sw50lId
return pvTo; Q]]M;(
N+vsQ!Qz
} iGBHlw;A
ex.^V sf_
|+Xh ^E
九、内存的分配方式 9RC:-d;;_
&w{z
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 I5]58Ohx
R ^"*ut
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 /Ri-iC >
V"T5<HA9
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 O4!!*0(+91
<.ZD.u
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 uM[[skc
ItE)h[86
bRJ]avR
十、内存分配的注意事项 V$ho9gQ!l[
pIPjTQ?cq
用new或malloc分配内存时,必须要对此指针赋初值。 !
QKec
Pa{bkr
用delete 或free释放内存后,必须要将指针指向NULL 6?-,@e
XUK%O8N#9
不能修改指向常量的指针数据 4rypT-%^ ;
d 1 O+qS
'<h@h*R
十一、内容复制与比较 } 7i}dyQv}
lWFm>DiLY
//数组…… .p'\@@o5
D7C%Y^K]>E
char a[]=”Hello Word!”; T'7x,8&2|
XeXK~
char b[10]; LufZ,
V_9>Z?
strcpy(b,a); !^3j9<|@'
:Ek3]`q#
if (strcmp(a,b)==0) h)T-7b
9QkIMJf0e
{} 30h1)nQ$h}
.-:6L2
//指针…… =@k3*#\
Of{'A
char a[]=”Hello Word!”; WhL1OG
gC/-7/}
char *p; 5G#K)s(QC
s`,. &
p=new char[strlen(a)+1]; mGUl/.;yp-
l5_%Q+E_
strcpy(p,a); 7@i2Mz/eV
z|G 39
if (strcmp(p,a)==0) |Vc:o_n7
Alb5#tm:m
{} h_h6@/1l
LWP&Si*j
I\ y>I?X
十二、sizeof的问题 .g6(07TyV
d*<