一、#include “filename.h”和#include <filename.h>的区别 tU)+q?Mw
'Z&A5\~
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 ?=4J
Bq@G@Qi
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 VJ1`&
u8[X\f
9Xm"kVqd/
二、头文件的作用 |`O7>(h
}l[t0C
t
加强安全检测 V@Po}
TS1k'<c?
通过头文件可能方便地调用库功能,而不必关心其实现方式
d;CD~s
Z)?"pBv'
@8_K^3-~e
三、* , &修饰符的位置 pCg0xbc`
zSq+#O1#
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 2'@0|k,yC
14^t{
Y+G4:
四、if语句 ul% q6=f)
TkQ05'Qc
不要将布尔变量与任何值进行比较,那会很容易出错的。 OK2wxf
e| kYu[^
整形变量必须要有类型相同的值进行比较 m*I5 \
a{u)~:/G
浮点变量最好少比点,就算要比也要有值进行限制 beIEy(rA
].1R~7b
指针变量要和NULL进行比较,不要和布尔型和整形比较 ^|gN?:fA}
4s$))x9p
da2BQ;
五、const和#define的比较 52%.^/
wPG3Ap8L
const有数据类型,#define没有数据类型 I.(
9{
"+HZ~:~f
个别编译器中const可以进行调试,#define不可以进行调试 K):)bL(B
7tt&/k?Q
在类中定义常量有两种方式 e1'_]
rP>5OLP
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; E&"bgwav{(
xwz2N5
2、 用枚举代替const常量。 "dkvk7zCP
_ :][{W#
OY@/18D<>
六、C++函数中值的传递方式 *.~M#M 9c
:z^c<KFX
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) Y#rao:I
m$$U%=r>@
void fun(char c) //pass by value naAZR*(A
2j_L
jY'7
void fun(char *str) //pass by pointer A).wjd(_,
(F#Qu nze
void fun(char &str) //pass by reference Xt$?Kx_,
p_mP'
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 O"{NHNG\oT
pG|DT ?
函数的类型不能省略,就算没有也要加个void 1g|H8CA
<K2 )v~
fHe3 :a5+W
七、函数体中的指针或引用常量不能被返回 7ZJYT#>b
fw-LZ][
Char *func(void) Pw+cpM8<
7DT9\BT
{ 3 i>uKU1
LdRLKE<'e
char str[]=”Hello Word”; DuCq16'0T
:MJTmpq,
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 )FgcNB1|7
T@f$w/15
return str; RJSNniYr7
/dtFB5Z"w
} a}=)b#T`
%40|7O
函数体内的指针变量并不会随着函数的消亡而自动释放 `XI1,&Wp7
^#_@Kq%th
zR]l2zL3
八、一个内存拷贝函数的实现体 38JvJR yK}
R|5w :+=z
void *memcpy(void *pvTo,const void *pvFrom,size_t size) +VzR9ksJj
4S+P]U*jW
{ H!7/U_AH
R{Cj]:Ky
assert((pvTo!=NULL)&&(pvFrom!=NULL)); C
!uwD
a N_M
byte *pbTo=(byte*)pvTo; //防止地址被改变 ,Y}HP3
.,feRK>3
byte *pbFrom=(byte*)pvFrom; &Tl3\T0D
;B!&( 50e
while (size-- >0) z+Y0Zh";/#
+AXui|mn
pbTo++ = pbForm++; (?oK+,v?L
7TlOF
return pvTo; .p <!2
3rOv j&2
} Pq !\6s@
ALPZc:
UKn>.,
九、内存的分配方式 BK6oW3wD/
*\-6p0~A
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 Lw2EA 5
dTS7l02
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 l8jm7@.E
JrS|Ib)6
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 _sx]`3/86
$Z$BF
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 kOeW,:&65
EtKy?]i
T&cf6soo
十、内存分配的注意事项 1XL^Zhr
1;S@XC>
用new或malloc分配内存时,必须要对此指针赋初值。 ;5dJ5_ }
Pv/$;R%
用delete 或free释放内存后,必须要将指针指向NULL <08)G7
>'7Icx
不能修改指向常量的指针数据 ZC@Pfba[`
<D!"<&N