ACSII:American Standard Code for Information Interchange,美国信息交换标准码。
每个代码7位;
一共128个代码(26个小写字母,26个大写字母,10个数字,32个符号,33个控制代码和一个空格);
Unicode:宽字符集。
Unicode中的每个字符都是16位宽。
前128个Unicode字符(16位代码从0x0000 到 0x007F)是ACSII,而接下来的128个Unicode字符(代码从0x0080 到 0x00FF)是ISO 8859-1对ASCII的扩展。
Unicode字符串占用的内存是ASCII字符串的两倍。
ANSI C:美国国家标准编程语言——C。
DBCS:double-byte character set,双字节字符集。
ISO:International Standards Organization,国际标准化组织。
Intel微处理器首先从最低位字节开始存储多字节数值,所以:
typedef unsigned short wchar_t;
wchar_t c = 'A'; // 宽字符0x0041,16位宽。在内存中是以0x41,0x00的顺序保存的。
定义指向宽字符串的指针:
wchar_t *p = L"Hello!"; // 大写字母L(代表long),告诉编译器该字符串按宽字符保存——即每个字符占用2个字节。
指针变量p要占用4个字节,而字符串变量需要14个字节——每个字符需要2个字节,末尾的0(空结束符)还需要两个字节。
1. 当delete一个指针的时候,实际上仅是让编译器释放内存,但指针本身依然存在。这时它就是一个迷途指针。当把迷途指针赋值为0时,变为空指针。2. 如果试图删除迷途指针,程序会变得非常不稳定,任何情况都有可能发生。但是如果只是删除一个空指针,则很安全。3. 对迷途指针或者空指针解除指针的引用,是非法的,有可能会造成程序崩溃。如果指针是空指针,尽管同样是崩溃,但它同迷途指针造成的崩溃相比是一种可预料的崩溃。调试起来方便得多。
数组名是数组的首地址,是一个常量指针。
int a[5]; // a是代表数组的首地址,是一个常量指针。
a++; // error,常量指针,不能修改。
a+1; // right,指向数组中的第二个元素,数组的下标从0开始。
const 常量定义时,必须同时初始化。
如:
const double di; // 错误,没有初始化。
所谓原子访问,指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源。
内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接被嵌入到目标代码中。
宏只是一个简单的替换。
内联函数要做参数类型检查,这是内联函数跟宏相比的优势。
宏不是函数,只是在编译前(编译预处理阶段)将程序中有关字符串替换成宏体。
inline函数时函数,但在编译中不单独产生代码,而是将有关代码嵌入到调用处。
inline一般用于如下情况:
1. 一个函数被不断重复调用。
2. 函数只有简单的几行,且函数内不包含for,while,switch语句。
sizeof(A) = ?
对于一个类而言,即便它是一个空的类,编译器仍然要给它一个空间,所以类A即便什么都没有,它的空间大小依然是1。
sizeof(A) = 1;
1. const关键字的用法:
在C程序中,const的用法主要有定义常量、修饰函数参数、修饰函数返回值等3个用处。
在C++程序中,它还可以修饰函数的定义体,定义类中某个函数为恒态函数,即不改变类中的数据成员。
被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
2. const 与 #define宏的区别:
2.1 const常量有数据类型,而宏常量没有数据类型。编译器可以对const常量进行类型安全检查,而对宏常量只进行字符替换,没有类型安全检查,
并且在字符替换中可能会产生意料不到的错误(边际效应)。
2.2 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
在C++程序中只使用const常量而不使用宏常量。
如果用户需要使用某个进程的窗口,这个进程就称为前台进程(foreground process),而所有其他的进程称为后台进程(background process).