一、#include “filename.h”和#include <filename.h>的区别 A94VSUDA:
{bETHPCf
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 ObM5v rEk|
}Pb!u9_
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 cjN4U [
7/7A
Wq{' ZN
二、头文件的作用 0[3b,
1}jE?{V*
加强安全检测 X_!mZ\H7
/@#)j(
eY/
通过头文件可能方便地调用库功能,而不必关心其实现方式 ]}v`#-Px(
rW\~s TH
!Rb7q{@>
三、* , &修饰符的位置 iBUf1v
T[Gz
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 609=o+
c7rYG]
D 0n2r
四、if语句 N ZlJ_[\$C
q',a7Tf:
不要将布尔变量与任何值进行比较,那会很容易出错的。 8%xtb6#7M
[2\`Wh:%P
整形变量必须要有类型相同的值进行比较 )i!)Tv
SbI,9<
浮点变量最好少比点,就算要比也要有值进行限制 S?3{G@!
k6Tpaf^
指针变量要和NULL进行比较,不要和布尔型和整形比较 !m(6/*PAl
q6G([h7
H>7!+&M
五、const和#define的比较 SiBbz4
3:;%@4f
const有数据类型,#define没有数据类型 b6/:reH{
I(7gmCV
个别编译器中const可以进行调试,#define不可以进行调试 /Cg/Rwl
e1/|PgT(KM
在类中定义常量有两种方式 L0_=R;.<
dJ&s/Z/>E
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; >y8Z{ALQ5
3o^V$N.
2、 用枚举代替const常量。 PRah?|*0s
?=4t~\g?
&YMVoyVD
六、C++函数中值的传递方式
Y-{spTI
WI~%n
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) L+kS8D<
a0LX<}
void fun(char c) //pass by value "Q
J-IRt&
'+QgZ>q"
void fun(char *str) //pass by pointer # xoFIH
(@#Lk"B
void fun(char &str) //pass by reference +es6c')
%4-pw|':
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 hBqu,A
U&/S
函数的类型不能省略,就算没有也要加个void >S3 >b
<A&R%5Vs
*oWzH_
七、函数体中的指针或引用常量不能被返回
<?7~,#AK
X'F$K!o*,:
Char *func(void) Uh8ieb
Q$zlxn 7\
{ $Yxy(7d7w
d!X?R}
char str[]=”Hello Word”; ]s SoIT
2M1mdkP3
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 ky%%H;
.R"L$V$RU.
return str; X5yh S
N|)V/no 6
} 1lQ10J
b>(lF%M
函数体内的指针变量并不会随着函数的消亡而自动释放 Dm^kuTIG
{2Ibd i
;5l|-&{@*
八、一个内存拷贝函数的实现体 [eN{Ft0x
,5?MRqCM
void *memcpy(void *pvTo,const void *pvFrom,size_t size) W!^=)Qs
w#$k$T)
{ J|q_&MX/
mNYz7N
assert((pvTo!=NULL)&&(pvFrom!=NULL)); _L72Ae(_
xd.C&Dx5
byte *pbTo=(byte*)pvTo; //防止地址被改变 wz#n$W3mGf
e+WVN5"ID>
byte *pbFrom=(byte*)pvFrom; )5v .9N6v
cA\W|A)
while (size-- >0) l{AT)1;^
;Vy'y
pbTo++ = pbForm++; 0Q9OQqg
m
Uwk|M?94
return pvTo; LN^8U
&40]sxm
} b#U%aPH
/km3L7L%R
*X-$*
~J0
九、内存的分配方式 ;CZcY] ol
BYf"l8^,
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 7EXmmB~>,
/{va<