一、#include “filename.h”和#include <filename.h>的区别 ;P _`4w3
_qmBPUx
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 k-T_,1l{
)j@k[}R#g
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 tZ=BK:39\
0pu])[P]_[
5\f*xY
二、头文件的作用 bsPw Tp^
&tQ,2RT
加强安全检测 ix]3t^
lV$U!v:b
通过头文件可能方便地调用库功能,而不必关心其实现方式 (J<@e!@NE
H U$:x"AW
r#]gAG4t\
三、* , &修饰符的位置 tZU"Ud
*=S\jek
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 *H&a_s/{Nb
\Ul*Nsw
xvjHGgWSxc
四、if语句 3VA8K@QiRm
8+
B. x
不要将布尔变量与任何值进行比较,那会很容易出错的。 Iu(T@",Q#
|RAi6;
整形变量必须要有类型相同的值进行比较 ahS*YeS7
b3EW"^Ar
浮点变量最好少比点,就算要比也要有值进行限制 =t&B8+6
@w6^*Z_hQ
指针变量要和NULL进行比较,不要和布尔型和整形比较 ))G%C6-
\fU{$
'|4/aHU
五、const和#define的比较 ,`/!0Wmt
c2?(.UV
const有数据类型,#define没有数据类型 #&r^~>,#L-
zi[bpa17W
个别编译器中const可以进行调试,#define不可以进行调试 *-_` xe
ID'@}69.S
在类中定义常量有两种方式 %'4dgk
AUS?Pt[w
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; wxo(
IOTHk+w
2、 用枚举代替const常量。 9Wx q
yW|yZ(7
pVt-7AgW
六、C++函数中值的传递方式 bMkn(_H)\
"H%TOk7l
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) &E {/s
mN3%;$ND7
void fun(char c) //pass by value }#EiL
!Pv
I.y|AQB
void fun(char *str) //pass by pointer jc Ie<i;
X_Y$-I$qd
void fun(char &str) //pass by reference 1;vn*w`p
NqhRJa63
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 b0LQ$XM>8
~O@V;y
函数的类型不能省略,就算没有也要加个void O~fRcf:Q
1#]tCi`
RU_=VB %
七、函数体中的指针或引用常量不能被返回 GsqrKrbJ
nF
A7@hsm
Char *func(void) QE<63|
)]>=Uo
{ _QY0j%W
w{2V7*+l
char str[]=”Hello Word”; mtm BL2?
YDjQ&EH
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 'cH),~ z
v{?9PRf\s
return str; _i}6zxqw
wg!
} 5IdmKP|
uO7Ti]H
函数体内的指针变量并不会随着函数的消亡而自动释放 tBrd+}e2*
86IAAO`#
CzNSJVE5
八、一个内存拷贝函数的实现体 ih ,8'D4
[uAfE3
void *memcpy(void *pvTo,const void *pvFrom,size_t size) /Pg66H#RUf
;K$E;ZhPN
{ X5>p~;[9
gyI5;il~
assert((pvTo!=NULL)&&(pvFrom!=NULL)); ?F?!QrL
+` Em&
byte *pbTo=(byte*)pvTo; //防止地址被改变 2&$ A x
dVO|q9 /
byte *pbFrom=(byte*)pvFrom; {T:2+iS9:
Rq4\~F?
while (size-- >0) #Fu OTBNvB
^BNg^V.
pbTo++ = pbForm++; HpNf f0c
[Y'Xop6G
return pvTo; 6wnfAli.
uERc\TZ
} Z[0xqGYLB
d['BtVJ
$[FO(w@f
九、内存的分配方式 +sgishqn9
\i`/k(
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 nBGk %NM 8
h7*fjw-Xz[
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 GbStqR~^#
5^f>L2
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 7U?x8%H*
sEhdkN}6
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 QabF(}61
70|Cn(p_
5;dnxhf
十、内存分配的注意事项 ->K*r\T
ZHw)N&Qn
用new或malloc分配内存时,必须要对此指针赋初值。 7c+TS--
wCn W]<+
用delete 或free释放内存后,必须要将指针指向NULL g<}K^)x
Z$HYXm
不能修改指向常量的指针数据 LA"`8
ivw2EEo,
bnUd !/;
十一、内容复制与比较 |910xd`Z
f5d"H6%L
//数组…… 1(rH5z'F
=$Xdn'
char a[]=”Hello Word!”; 0P%(4t$pd
I^\YD9~=x
char b[10]; mpXco *!_
&m+s5
strcpy(b,a); XP6R$0yN
a.wRJ
if (strcmp(a,b)==0) GaM#a[p
4wBMBCJ;P
{} *4]I#N
*9?-JBT&F
//指针…… NaB8cLURp
;se-IDN
char a[]=”Hello Word!”; C x$|7J=O
el7P
char *p; /`}C~
.CrahV1G
p=new char[strlen(a)+1]; m3P%E8<Q#
s 6vsV
strcpy(p,a); 2$=?;~
?&"cI5-
if (strcmp(p,a)==0) \W}?4kz
ryN/sjQC
{} OHM.xw*?.
1th|n
D8BK/E-
十二、sizeof的问题 osPX%k!yw
]%ikr&78u
记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节 8WfF: R;
+Rxf~m(pV
char a[]=”Hello World!” 6_`x^[r
) dwPD
char *p=a; B5zu?AG
SYeCz(H>d
count<<sizeof(a)<<end; //12字节 }oj$w?Ex
nWmc
count<<sizeof(p)<<endl; //4字节 H_vOZ0
uTBls8
而且,在函数中,数组参数退化为指针,所以下面的内容永远输出为4 :$dGcX}
6>SP5|GG
void fun(char a[1000]) -Ufd+(
n M,m#"AI
{ \SA5@.W
EX=+TOkAf
count<<sizeof(a)<<endl; //输出4而不是1000 kHm1aE<
+:mj]`=
} LL#7oBJdM
o5i?|HJ
pj?+cy
v~
十三、关于指针 'O
\YL(j_e
6V*@
{
1、 指针创建时必须被初始化 \*v}IO>2})
&