一、#include “filename.h”和#include <filename.h>的区别 9X%:
){
uo J0wG.
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 7Xu# |k
AS@(]T#R
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 \D(3~y>
HZZZ [km
qT !lq
二、头文件的作用 V=dOeuYd
3l45(%g+
加强安全检测 y(MB_B7j
xVbRCu#Z
通过头文件可能方便地调用库功能,而不必关心其实现方式 j6Sg~nRh
QnD8L.Dg
)\ceanS
三、* , &修饰符的位置
-{ 1P`&G
9#@s(s
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 ,LN^Zx*
#IZh}*$
m7g*zu2#
四、if语句 2dkWzx
MO0NNVVi%U
不要将布尔变量与任何值进行比较,那会很容易出错的。 77yYdil^W+
NWvIwt{
整形变量必须要有类型相同的值进行比较 D|*w6p("z
zMu9A|
浮点变量最好少比点,就算要比也要有值进行限制 "q+Z*
3CjixXaA$
指针变量要和NULL进行比较,不要和布尔型和整形比较 H~nX!sO
;Vat\,45pg
*oz#YGNm
五、const和#define的比较 1h?ve,$
69)"T{7
const有数据类型,#define没有数据类型 R$hIgw+p[
1:](=%oM&k
个别编译器中const可以进行调试,#define不可以进行调试 qe{;EH*
n|&=6hiI
在类中定义常量有两种方式 n19A>,m
{+hABusq
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; 'QG`^@Z
FEu"b@v
2、 用枚举代替const常量。 V~j^
x4c|/}\)*
`x/i1^/_@
六、C++函数中值的传递方式 zHZfp_I
f0sLe 3
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) 6[k<&;
{{Ox%Zm
void fun(char c) //pass by value 3`%E;?2
7WS$fUBi
void fun(char *str) //pass by pointer C0N}B1-MU
<ytzGDx
void fun(char &str) //pass by reference 5H
XF3
<hCO-r#
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 B._YT
0H>gMXWE]
函数的类型不能省略,就算没有也要加个void gR# k'
4bA^Gq
VqW5VLa
七、函数体中的指针或引用常量不能被返回 R)JH D7
1
s=(q#Z
Char *func(void) sk3 9[9
CYy=f-
{ dB6,pY(
"ymR8y'
char str[]=”Hello Word”; ao9#E"BfM
2H.g!( Oza
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 B;(U?gC
bpZA%{GS
return str; S!u8JG1
Any y
} AH&RabH2
?j/FYi
函数体内的指针变量并不会随着函数的消亡而自动释放 G7" (,L` 5
^@* `vz^_
S:j{R^$k
八、一个内存拷贝函数的实现体 '4i8&p`/
4Z%1eOR9V
void *memcpy(void *pvTo,const void *pvFrom,size_t size) G$TO'Ciu:
U$gR}8\e
{ p2 1|
^zV_vB)n
assert((pvTo!=NULL)&&(pvFrom!=NULL)); .c}+kHv
} uS0N$4
byte *pbTo=(byte*)pvTo; //防止地址被改变 C3W4:kbau
Fdhgm{Y2s
byte *pbFrom=(byte*)pvFrom; =9ff983
tWy.Gz\
while (size-- >0) :5&D6
4t(/F`
pbTo++ = pbForm++; b;jdk w|
WC<[<uI*
return pvTo; -V{"Lzrfug
RN-gZ{AW
} wX}p6yyN
*V',@NH#Os
.kU^)H"l
九、内存的分配方式 ~;CNWJtcf(
K0(
S%v|,}
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 \78^ O
j36YIz$a
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 .%n_{ab1
%:`v.AG
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 1Zc=QJw@
F\+AA
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 Qb?a[[3
r craf4%
&Iy5@8
十、内存分配的注意事项 9#U]?^DJ@
Lp:VU-S
用new或malloc分配内存时,必须要对此指针赋初值。 !1I# L!9
%pq.fZI
用delete 或free释放内存后,必须要将指针指向NULL {Ia1H
nm#23@uZ4K
不能修改指向常量的指针数据 *:TwO=)
'qT;Eht5
_f@,)n
十一、内容复制与比较 b
3Q6-
HL"c yxe
//数组…… CA igV$
%OgK{h
char a[]=”Hello Word!”; J8S$YRZ_
Kt*b)
<
char b[10]; g^A^@~M
wnd
#J `
strcpy(b,a); Sc{&h8KMTb
_@>*]g
if (strcmp(a,b)==0) ]'xci"qV`
7WmLC
{} &q|vvF<G
Vn5%%?]J
//指针…… Xk|a%%O*H
9U<WR*H
char a[]=”Hello Word!”; YG0/e#5
i5le0lM
char *p; Te}gmt+#%
A nl1+
p=new char[strlen(a)+1]; KB~[nZs7
*c4OhMU(
strcpy(p,a); gnN>Rl
5_
sT1OAK\^
if (strcmp(p,a)==0) ASi2;Q_{_
~`e!$=
{} [F*yh9%\
*%jXjTA0D
90+Vw`Gz=
十二、sizeof的问题 ~_;.ZZ-H]
/Hk})o_
记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节 yj_/:eX
-ABj>y[
char a[]=”Hello World!” /xgC`]-
c(Y~5A{TXO
char *p=a; HHw&BN