一、#include “filename.h”和#include <filename.h>的区别 j&R+2%
a
W%5~3
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 fJAnKUF)
[KJ
q
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 !j:`7PT\
58tVx'1y
t*XN_=E$f
二、头文件的作用 FFKGd/:!
\ I`p|&vG
加强安全检测 wzCUZ1N9q
[
ho(z30k
通过头文件可能方便地调用库功能,而不必关心其实现方式 v(]]_h
.dMVoG5
: 9t4s#.
三、* , &修饰符的位置 ?.=}pAub
|JF@6
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名 e8=YGx^o`
.;7> y7$*
-O!/Jv"{,[
四、if语句 E#wS_[
gJ$K\[+
不要将布尔变量与任何值进行比较,那会很容易出错的。 "Z=5gj
6NWn(pZ]p
整形变量必须要有类型相同的值进行比较 _~u2: yl(
c]-*P7W
浮点变量最好少比点,就算要比也要有值进行限制 )!BsF'uVQ
SQ*k =4*r
指针变量要和NULL进行比较,不要和布尔型和整形比较 bi4f]^hQz
A]0:8@k5
!p/%lU65
五、const和#define的比较 8;14Q7,S
Vr[czfROz'
const有数据类型,#define没有数据类型 _nh[(F<hz
yp.[HMRD
个别编译器中const可以进行调试,#define不可以进行调试 kX`[Y@nUN
j=?'4sF
在类中定义常量有两种方式 SMH<'F7i
M=qb^~ l
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; 1 rs&74-
DV)3
2、 用枚举代替const常量。 EZ;"'4;W
:#k &\f-Y
`o]g~AKX
六、C++函数中值的传递方式 #|GSQJ$F)`
nrm+z"7
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) q#w8wH"
39wa|:I
void fun(char c) //pass by value Vwk #qgnX
L"jY+{oLIJ
void fun(char *str) //pass by pointer B.r4$:+jb2
Ian[LbCWB
void fun(char &str) //pass by reference ~Nf})U
66x?A0P
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 v3d&*I
".^VI2T
函数的类型不能省略,就算没有也要加个void G7!W{;@I
m%;D
DGW+>\G
七、函数体中的指针或引用常量不能被返回 &8.NT~"Gg
05yZad*
Char *func(void) )SryDRT
W&(k!6<x
{ !-`Cp3gqHr
X\$ 0
char str[]=”Hello Word”; goat<\a
m7EcnQf
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 E%oY7.~-
6 DG@?O
return str; p'7*6bj1
xx{!3 F
} bXUy9-L
Q+4tIrd+
函数体内的指针变量并不会随着函数的消亡而自动释放 h$eEn l}
o<IAeH {+
/~*_x=p:
八、一个内存拷贝函数的实现体 jZ`;Cy\<B
,p(<+6QZ
void *memcpy(void *pvTo,const void *pvFrom,size_t size) 76hOB@
3rLTF\
{ 8k
q5ud
!Z
VU,b>
assert((pvTo!=NULL)&&(pvFrom!=NULL)); JSh.]j<bJL
WJ<^E"^
byte *pbTo=(byte*)pvTo; //防止地址被改变 (=D&A<YX
lj+u@Z<xA
byte *pbFrom=(byte*)pvFrom; gs!(;N\j|
w 4[{2
while (size-- >0) !*- >;:9B
4DZ-bt'
pbTo++ = pbForm++; zOg7raIa
;7N{^"r
return pvTo; AJ#Nenmj
D}8EER b
} 'y8]_K*
U9b?i$
.bBdQpF-
九、内存的分配方式 {( r6e
*CHI2MB
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 dy_:-2S
=zQN[
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 ;WR,eI..
Ft}@1w5
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 {s. = )0V
H"A7Zo
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 %|s+jeUDn|
(vT+IZEI
Ua!aaq&
十、内存分配的注意事项 6@DF
fb^fVSh>
用new或malloc分配内存时,必须要对此指针赋初值。 J:V?EE,\-
jy-{~xdg[
用delete 或free释放内存后,必须要将指针指向NULL >/|q:b^2r
/SYw;<=
不能修改指向常量的指针数据 )GHq/:1W
<&C]sb
pK0"%eA
十一、内容复制与比较 O/[cpRe
E>l~-PaZY
//数组…… 9B;{]c
oJN#C%r7
char a[]=”Hello Word!”; 7uzkp&+:
1GzAG;UUo6
char b[10]; ):iA\A5q[
T=ev[ mS
strcpy(b,a); yPq'( PV
AK@9?_D
if (strcmp(a,b)==0) /Rl6g9}
3Z1CWzq(
{} G^ :C+/)
.V,@k7U,V
//指针…… gEjdN.
ob8qe,_'
char a[]=”Hello Word!”; -B +4+&{T
5{g?,/(
char *p; M3.do^ss
YPxM<Gfa8
p=new char[strlen(a)+1]; z<Nfm
q<M2,YrbAI
strcpy(p,a); 7Op>i,HZk\
&q9T9AOS
if (strcmp(p,a)==0) X(NLtO
w
'dn]rV0(C
{} !z>6Uf!{
2'w?\{}D
\.-bZ$
十二、sizeof的问题 gw!vlwC&T
'tH_p
记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节 s%W C/ZK
,y#Kv|R
char a[]=”Hello World!” ;=MU';o
K|epPGRr
char *p=a; {z{bY\
yK=cZw%D
count<<sizeof(a)<<end; //12字节 .6Pw|xu`Pw
5?x>9Ca
count<<sizeof(p)<<endl; //4字节 wfH^<jY)E
I`!<9OTBj
而且,在函数中,数组参数退化为指针,所以下面的内容永远输出为4 6^`1\
#f
F'21jy&
void fun(char a[1000]) BI%$c~wS
<