一、#include “filename.h”和#include <filename.h>的区别 (`.# n3{
}*:3]
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件 8V:;HY#
<C`bf$ak
#include <filename.h>是指编译器将从标准库目录中开始查找此文件 J M`w6}
xi (@\A
0*{(R#
二、头文件的作用 \YvG+7a
OUBGbld
加强安全检测 D3Q+K
{)" 3
通过头文件可能方便地调用库功能,而不必关心其实现方式 (|QJ[@?q
!Tnjha*
0Ui.nz j
三、* , &修饰符的位置 $TUYxf0q
GHv6UIe&
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名
x=*Y|
!ku}vTe
'kd}vq#|
四、if语句 63fYX"
;<+efYmyc
不要将布尔变量与任何值进行比较,那会很容易出错的。 zx#Gm=H4
*;A ;)'
整形变量必须要有类型相同的值进行比较 |1@O>GG
ZLQmEF[>
浮点变量最好少比点,就算要比也要有值进行限制 b31$i 5{
w.m8SvS&b
指针变量要和NULL进行比较,不要和布尔型和整形比较 $ f:uBhM
o5Oig
-E7mt`:d
五、const和#define的比较 _pdKcE\X
KXt8IMP_"y
const有数据类型,#define没有数据类型 $?GggP d
SEgw!2H
个别编译器中const可以进行调试,#define不可以进行调试 h#0n2o #
;$D,w
在类中定义常量有两种方式 iK}p#"si
hUMG}<
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; C*Q7@+&
:C5w5
Vnj
2、 用枚举代替const常量。 !Rv ;~f/2
T~UDD3
+5y^c|L0
六、C++函数中值的传递方式 ";/]rwHa)
}c,b]!:
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) TEV DES
#0AyC.\
void fun(char c) //pass by value )\+Imn
T}Tv}~!f
void fun(char *str) //pass by pointer ucl001EK
x;vfmgty
void fun(char &str) //pass by reference $0Y`>3
Z %pc"
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 vobC/m
NO5k1/-
函数的类型不能省略,就算没有也要加个void W2{w<<\$3}
`EKf1U\FI
+`>7cy%cZ
七、函数体中的指针或引用常量不能被返回 m>uG{4<-
MHwfJ{"zo
Char *func(void) 2s}S9
KM &P5}
{ 8^_:9&) i
7C|AiSH
char str[]=”Hello Word”; l!p`g>$&f
7-S?RU]g
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 dDS{XR
YnpN
-Y%g
return str; vP{i+s18B
eU"yF >6'
} ?+}Su'pv}
9a_P 9s3w
函数体内的指针变量并不会随着函数的消亡而自动释放 ^;
KCE
4X=VNORlU0
5*z>ez2YQ7
八、一个内存拷贝函数的实现体 Luao?;|U
U5"u
h} 3
void *memcpy(void *pvTo,const void *pvFrom,size_t size) "kApGNB
8u*<GbKGI
{ z83v
J*.
a?gF;AYk
assert((pvTo!=NULL)&&(pvFrom!=NULL)); ~gX1n9_n
!*l /Pr^8
byte *pbTo=(byte*)pvTo; //防止地址被改变 }Y-V!z5z!
s#7"ZN
byte *pbFrom=(byte*)pvFrom; #IH9S5B [
~W@dF~r
while (size-- >0) OP!R>|
99OZK
pbTo++ = pbForm++; *<\`"C;
89d%P
J0
return pvTo; xh;gAh5n
W'6DwV|
} !oyo_h
%;&lVIU0
&S="]*Z
九、内存的分配方式 _qB
._
ZvyZ5UA
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题 B~:yM1f@u4
4j3q69TZR
1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。 'bbw0aB4
bg~CV&]M
2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。 jwwRejNV
8R)K$J$Hm
3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。 2D!jVr!
1XiA
6vNW)1{nn
十、内存分配的注意事项 (H:c80/V
}hy4EJ
用new或malloc分配内存时,必须要对此指针赋初值。 &l cfX\y
vapC5,W"2-
用delete 或free释放内存后,必须要将指针指向NULL C-edQWbcP
|0ZJ[[2
不能修改指向常量的指针数据 M[I=N
o?ug`m"
@.sn
十一、内容复制与比较 6zM:p/
3nBZ+n4z
//数组…… p7\LLJ y
]2u
char a[]=”Hello Word!”; tE0{ae
Nd(3q]{
char b[10]; Ht.P670
-+ F,L8
strcpy(b,a); &/m^}x/_W
k*_Gg
if (strcmp(a,b)==0) 'n h^;
`NhG|g
{} tHzgZoBz
0$Tb5+H5
//指针…… v,n 8$,
:G6CWE
char a[]=”Hello Word!”; Fepsa;\sU
W9l](Ow
char *p; ;tQc{8O6L
pYcs4f!?p
p=new char[strlen(a)+1]; #j7&2L
Zf>:h
strcpy(p,a); r!b>!
"PMJh 3q
if (strcmp(p,a)==0)
/- Gq`9Z
]$#bNt/p
{} ,~7~ S"
r]6+&K
Y;Nq (
十二、sizeof的问题 gjsks(x
N!.o`4 "z
记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节 BqJ|l7+
7&