一、#include “filename.h”和#include <filename.h>的区别 VO++(G)
1Kwl_jf
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 .%~
L
"@`M>)*o
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 0ZPPt(7
*4A.R&Vu
I+u=H2][2
二、头文件的作用 [-Q"A
6!Zd
B}r@x z
加强安全检测 D.$EvUSK<.
/R@(yT=t
通过头文件可能方便地调用库功能,而不必关心其实现方式 <|.S~HLTQ
Y^3tk}yru
X3a:*1N
三、* , &修饰符的位置 b/ZX}<s(1=
?nUV3#6{
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 7"8HlOHA
]T
zN*6o
}yB@?
四、if语句 !j7b7<wR
i_gS!1Z2
不要将布尔变量与任何值进行比较,那会很容易出错的。 f_;3|i
SOP=
X-6f
整形变量必须要有类型相同的值进行比较 Wy4v~]xd%
9(u2jbA
浮点变量最好少比点,就算要比也要有值进行限制 'HOcK8}b
E*RP8
指针变量要和NULL进行比较,不要和布尔型和整形比较 ?]5wX2G^|J
/0@}7+&
_);1dcnR
五、const和#define的比较 :4)mv4Q
=PO/Q|-v?
const有数据类型,#define没有数据类型 :q6hT<f;
_>3GNvS
个别编译器中const可以进行调试,#define不可以进行调试 G?jY>;P)
(v(_XlMK
在类中定义常量有两种方式 `bt]v $
X*FK6,Y|(
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; : PQA9U|
*OsXjL`f
2、 用枚举代替const常量。 O#u)~C?)8
'OF)`5sj
/vU9eh"%
六、C++函数中值的传递方式 qn4Dm ^
B=n]N+
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) W>1\f0'
rEddX
void fun(char c) //pass by value S93NsrBbY
C"0gAN
void fun(char *str) //pass by pointer eb( =V*
0}P&G^%"
void fun(char &str) //pass by reference !pDS*{)E
D0"+E*
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 CsuSg*#X+
pRt )B`#
函数的类型不能省略,就算没有也要加个void 45ct*w
G%'h'AV"
q:?g?v
七、函数体中的指针或引用常量不能被返回 0imz}Z]
uy`U1>
Char *func(void) U?>zq!C&R
bF B;N+>
{ xn6E f"
QjZ}*p
char str[]=”Hello Word”; NWoZDsu
+S3'ms
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 %81tVhg
`_<AZ{&&
return str; qTffh{q V
dB_\,%vAd
} ]FFU,me2
%lV>Nc|iz=
函数体内的指针变量并不会随着函数的消亡而自动释放 .h7b 4J
sav2 .w
MfYe @;m
八、一个内存拷贝函数的实现体 );,#H`'
fcV/co_S6
void *memcpy(void *pvTo,const void *pvFrom,size_t size) =Oo*7|Z
K-vso4@BJ
{ }i/{8OuW
- MBK/
assert((pvTo!=NULL)&&(pvFrom!=NULL)); =}Cb?C[;
}8r+&e
byte *pbTo=(byte*)pvTo; //防止地址被改变 d628@~Ekn
*riGi
byte *pbFrom=(byte*)pvFrom; kWoy%?|RRa
<(^-o4Cl
while (size-- >0) ^2=Jv.2{|
]%mg(&p4
pbTo++ = pbForm++; WP}__1!%u
?]P&3UU>0z
return pvTo; {/ty{
Zr$PSp}
} OSSMIPr
VQ}=7oe%q
,'ndQ{\9
九、内存的分配方式 XeZv%` ?
PE4{;|a }
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 C?E;sRr0
f$H"|Mbe
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 FE_n+^|k<
F.@yNr"
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 y ruN5
Wt4!XV
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 uIWCVR8`Y
1)
@Wcc.
*nH ?o* #
十、内存分配的注意事项 69IBG,N'
:$94y{
用new或malloc分配内存时,必须要对此指针赋初值。 }4bwLO
Qs,LK(1
用delete 或free释放内存后,必须要将指针指向NULL w5&UG/z%l
q.g!WLiI
不能修改指向常量的指针数据 M8g=t[\
*XNvb ^<
c<4pu
十一、内容复制与比较 bAW;2
NB
H=wmN0s{<
//数组…… K
IqF"5
g8vN^nQf[
char a[]=”Hello Word!”; gzC\6ca
%K%8
~B
char b[10]; [[bMYD1eO
-6
strcpy(b,a); @AyC0}
mFo6f\DHr`
if (strcmp(a,b)==0) ZNuyGo;
7p~@S4
{} 2&=;$2?}
]jy6C'Mp
//指针…… QU417EV'
w[VWk
char a[]=”Hello Word!”; sA`
bPh k
N>gv!z[E
char *p; Ii4Byyfx
;
4S#6#
p=new char[strlen(a)+1]; ;JAe=wt^'I
3J[P(G>Q
strcpy(p,a); ;w@:
~xXB
!K~C
if (strcmp(p,a)==0) >j$f$*x
s2d;601*b
{} 9@:&