一、#include “filename.h”和#include <filename.h>的区别 wii.0~p
782 oXyD
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 |;(>q
gXj3=N(l
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 j.yh>"de
8 4lT# ^q
I{$TMkh[
二、头文件的作用 I.gF38Mx
Ub{7 Xk
n
加强安全检测 |fB/ hs \
l(pP*2
通过头文件可能方便地调用库功能,而不必关心其实现方式
6`@6k2]
@rv)J[7Y&
F]L96&
三、* , &修饰符的位置 rA|&G'
58t_j54
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 *m8{yh
$WiUoS
C1uV7t*\
四、if语句 t=\
ffpA
Mn 8|
Knh
不要将布尔变量与任何值进行比较,那会很容易出错的。 9JqT"zj
]*X z~Ox2
整形变量必须要有类型相同的值进行比较 #h#_xh'
bt"5.nm
浮点变量最好少比点,就算要比也要有值进行限制 Xb~i?T;f
_n0NE0
指针变量要和NULL进行比较,不要和布尔型和整形比较 QuBA'4ht
IC6'>2'=T
;*{Ls#
五、const和#define的比较 eF(oHn,
p@?ud%
const有数据类型,#define没有数据类型 CHVAs9mrNB
[4Q;5 'Dj
个别编译器中const可以进行调试,#define不可以进行调试 yBCLS550
UJuz
在类中定义常量有两种方式 BxiR0snf0q
DFbhy
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; WQ9VcCY
Ri3*au/Q
2、 用枚举代替const常量。 5S ) N&%
XaaR>HljJ
q#F+^)DD [
六、C++函数中值的传递方式 hT%
>)71
VHLt,?G
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) ,E8g~ZUY9
mMT\"bb'
void fun(char c) //pass by value ba)hWtenH
or"9I1o
void fun(char *str) //pass by pointer )=!|^M
y,6KU$G
void fun(char &str) //pass by reference >x]ir
~"Su2{"8B
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 tlYB'8bJY
{Q)sR*d
函数的类型不能省略,就算没有也要加个void W!|l_/L'
%v0;1m
L lD=c
七、函数体中的指针或引用常量不能被返回 [sK'jQo-[1
(ylZ[M&B:
Char *func(void) iM$iZ;Tp
{5 3#Xd
{ k&:~l@?O
:|-^et]a8
char str[]=”Hello Word”; I/zI\PP,
~lbm^S}-
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 R ^"*ut
sRQ4pnnrn
return str; '8LHX6FXK
d>0 j!+s
} zhh6;>P
z`YAOhD*h4
函数体内的指针变量并不会随着函数的消亡而自动释放 8mC$p6Okd
Y pvFv-
/PpZ6ne~[
八、一个内存拷贝函数的实现体 >ktekO:H
keJ-ohv)
void *memcpy(void *pvTo,const void *pvFrom,size_t size) of'H]IZ
U%K gLg#
{ [4-u{Tu
JmuoYl f|
assert((pvTo!=NULL)&&(pvFrom!=NULL)); g@m__
Mn*5oH
byte *pbTo=(byte*)pvTo; //防止地址被改变 aW#^@||B
]sqp^tQ`e
byte *pbFrom=(byte*)pvFrom; LAGg(:3f3
-3SRGr
while (size-- >0) ;I>77gi`]
d 1 O+qS
pbTo++ = pbForm++; $gdGII&n
5N907XVu
return pvTo; GPAz#0p
ig'4DmNC
} ,]4.|A_[Rq
U\q?tvn'J
d3 p;[;`
九、内存的分配方式 .VkLF6
xw3A |Aj?r
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 XeozRfk%J|
R7Ns5s3X
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 \r}*<CRr6
;n b>IL
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 }b>e
lz
XRn+6fn|
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 a61?G!]
R/&C}6Gn
}S9uh-j6l
十、内存分配的注意事项 zU#
OjvNk
KvEZbf3f
用new或malloc分配内存时,必须要对此指针赋初值。 mZ.E;X& ,*
t`0(5v
用delete 或free释放内存后,必须要将指针指向NULL r]%.,i7~8
30h1)nQ$h}
不能修改指向常量的指针数据 $I a-go2W
'x=y:0A
P,n:u'Iwy
十一、内容复制与比较 9z(h8H
m
A|"
//数组…… cKAZWON8;v
j*jq2u
char a[]=”Hello Word!”; #~ [mn_C
eS"sd^;R
char b[10]; (d-j/v*4
Mp^U)S+
strcpy(b,a); nHB`<B
#J4,mFMr
if (strcmp(a,b)==0) "#`c\JuR]
C5oIl_t
{} :w4I+*]
=Y5*J#
//指针…… tA9(N>[*
1;9 %L@
char a[]=”Hello Word!”; >V3pYRA
4JjO.H
char *p; i{2rQy+
h9 3
p=new char[strlen(a)+1]; EB>rY
q8vRUlf
strcpy(p,a); [>f4&yY
XcQ'(
if (strcmp(p,a)==0) !O#NP!
.:jfNp~jt
{} [u`9R<>c"U
"O{:jfq
w5}2$r
十二、sizeof的问题 HUY1nb=
z/7"!
记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节 Q_n9}LanP
R P6R1iN3
char a[]=”Hello World!” V~qlg1h
ZBfB4<M9xS
char *p=a; 5P
< F
agW#"9]WM
count<<sizeof(a)<<end; //12字节 zf^F.wW
x^]1m%
count<<sizeof(p)<<endl; //4字节 ppM^&6x^
'^.}5be&
而且,在函数中,数组参数退化为指针,所以下面的内容永远输出为4 ic|>JX$G
}g[(h=Qi
void fun(char a[1000]) #oD*H:%*
^k}jPc6
{ }[I|oV5*+&
Mkadl<
count<<sizeof(a)<<endl; //输出4而不是1000 &