一、#include “filename.h”和#include <filename.h>的区别 $9Yk]~
?yqTLj
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 NN;'QiE
]aF!0Fln~
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 79JU
YKT=0
IJt8*
cw
二、头文件的作用 d*{NAq'9X
-N]%)Hy
加强安全检测 l
/\n7:
p:n.:GZ=y
通过头文件可能方便地调用库功能,而不必关心其实现方式 EsR$H2"
0cBk/x^s
X}s}E
;v9
三、* , &修饰符的位置 Y +9OP
&^4 E )F
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 +P?^Yx0d
Hkck=@>8H*
rFPfTpS
四、if语句 \h}a?T6
P,@ :?6
不要将布尔变量与任何值进行比较,那会很容易出错的。 $rG~0
Yuo
整形变量必须要有类型相同的值进行比较 atA:v3"
V!94I2%#x
浮点变量最好少比点,就算要比也要有值进行限制 <(U:v
:UgCP ~Y
指针变量要和NULL进行比较,不要和布尔型和整形比较 #I(Ho:b
(;o/2Q?
_(Qec?[^Ps
五、const和#define的比较 RC| t-(Z
{tlt5p!4
const有数据类型,#define没有数据类型 -Ob89Z?2A
h7h[!>
个别编译器中const可以进行调试,#define不可以进行调试 BbqH02i
P}Ud7Vil;l
在类中定义常量有两种方式 >(aGk{e1
~20O&2
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; 3LaqEj
.;&1"b8G
2、 用枚举代替const常量。 psHW(Z8G
UFoxv)
tL!R^Tf
六、C++函数中值的传递方式 C;&44cU/]
ZV;lr Vv
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) s28rj6q
n
7Bua
void fun(char c) //pass by value 2}^fhMS
1|c\^;cTkt
void fun(char *str) //pass by pointer 6fOh *
#6%9*Rh
void fun(char &str) //pass by reference ^l(Kj3gM
`T]1u4^E
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 rfdT0xfcU
8=#J:LeXj
函数的类型不能省略,就算没有也要加个void w9J^s<e
[e:mRMi
[aK7v{Wu
七、函数体中的指针或引用常量不能被返回 Ew|VDD(.
' N@1+v=
Char *func(void) ] hxE^/8 7
,%FBELqOW
{ P,ox))+6
y~cDWD<h
char str[]=”Hello Word”; *Q@%<R
D/$$"AT
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 f.4m6"1
f;k'dqlv
return str; >%~%O`+
A\jX #gg
} RU1+-
3O:gZRxK
函数体内的指针变量并不会随着函数的消亡而自动释放 N!fTt,
'NJCU.lKm
5+gSpg]i
八、一个内存拷贝函数的实现体 ;c-J)Ky
Q[+o\{ O
void *memcpy(void *pvTo,const void *pvFrom,size_t size) P1Z+XRWOM
L(yR"A{FsE
{ D-[`wCa,
O<1qU
M
assert((pvTo!=NULL)&&(pvFrom!=NULL)); V_&>0P{q
@GB~rfB[
byte *pbTo=(byte*)pvTo; //防止地址被改变 XCGJ~
g)<t=+a
byte *pbFrom=(byte*)pvFrom; Lwg@*:`d
0koC;(<n
while (size-- >0) uH}cvshv
o0nKgq'w|x
pbTo++ = pbForm++; :CQ-?mT^LA
_dT,%q
return pvTo; .7ZV:m
k|^e=I
} 3}@!TI
5,0fL
X0,?~i6Q
九、内存的分配方式 1Fado$#
7
7n-;++a5]
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 zF6]2Y?k%
Qg \OJmv
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 JY+ N+c\
ccUq!1
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 ?3Ytn+Py
ZR~ *Yofy
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 wz-#kH5?
8u,f<XHi"a
E6{|zF/3'
十、内存分配的注意事项 |G+6R-_
vpoeK'bi,
用new或malloc分配内存时,必须要对此指针赋初值。 liW0v!jBo
qeK_w
'
用delete 或free释放内存后,必须要将指针指向NULL 1CkBfK
0i[,`>-Av
不能修改指向常量的指针数据 /e^q>>z
>Jl(9)e
Ix;9D'^}
十一、内容复制与比较 Q1fJ`A=
r*|#*"K"a
//数组…… ay\ e#)
U{2[nF
char a[]=”Hello Word!”; ~>af"<
Fxu'(xa
char b[10]; IpX>G]"-C
@O7hY8",
strcpy(b,a); 0]C~CvO
q;dg,Om
if (strcmp(a,b)==0) wt;7+
*CHLs^)
{} vjy 59m
yw|O,V<4N
//指针…… 3x=f}SO&
%1uY
char a[]=”Hello Word!”; hrpql_9.
pXfg{2
char *p; 2qY`*Y.2
[xF (t @p
p=new char[strlen(a)+1]; qRXb9c
}1A Brbc
strcpy(p,a); @S /jVXA
b<