1、使用typedef来创建别名 eg:typedef unsigned short int USI;
2、unsigned整型变量的回绕:溢出后从0开始,signed整型变量的回绕:溢出后从最小负数开始。
3、将一个字符(如字母a)赋给char变量时,该变量实际存储的是一个0~255的ASCII码数值。
4、转义字符:\a响铃 \b退格 \f换页 \n换行 \r 回车 \t 制表 \v 垂直制表 \' 单引号 \"双引号 \?问号 \\ 反斜杠 \000八进制表示 \xhhh十六进制表示
5、c++中有两种声明符号常量的方法:1)传统方法,用#define,现已摒弃 2)更合适的方法是使用关键字const
6、#define stuPerClass 15 没有指定stuPerClass的类型,预处理器进行简单地文本替换,无法进行类型安全检查;由于预处理器在编译器之前运行,因此编译器只能看到15,而看不到常量stuPerClass,不便调试。const unsigned short int stuPerClass=15; 这种声明使程序易于维护和防止错误,最大的不同在于,该常量有类型,使得编译器能根据类型确保它被正确使用。
7、创建枚举常量:enum COLOR {RED, BLUE, GREEN, WHITE, BLACK};
COLOR为枚举名,若不特别指定,第一个常量(RED)值为0,其余常量值依次加1;若将其中任一常量初始化为特定值,则其后未被初始化的默认加1。eg:enum COLOR {RED=100, BLUE, GREEN=500, WHITE, BLACK=700}; 则BLUE=101,WHITE=501
8、枚举常量的类型是unsigned int
9、一个枚举常量的例子:
main(){
enum weekday
{
sun,mon,tue,wed,thu,fri,sat
} a,b,c;
a=sun;
b=mon;
c=tue;
printf("%d,%d,%d",a,b,c);
}
/*说明: 只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如:
a=sun;
b=mon; 是正确的。
而: a=0; b=1; 是错误的
10、关于函数的全局变量和局部变量需要注意的几点:
1)定义在全体函数外的变量为全局变量,任何函数都可用
2)定义在函数内的变量为局部变量,作用域为该函数。定义在函数内一个语句块(一对大括号之间)的变量作用域为该语句块。
3)传入函数的参数为函数中的局部变量。
4)与全局变量同名的局部变量不会修改全局变量(称为按值传递),但会隐藏它,即在该局部变量作用域内显示的是局部变量的值。注意一下一个例子:
11、函数原型可声明默认参数,eg: long func(int x=50); 或 long func(int =50); 调用函数时若没有提供参数则采用默认值50。
注意:若某个参数没有默认值,则它前面的所有参数都不得有默认值。eg:
函数声明: long func(int param1, int param2, int param3); 若param3没有赋默认值,则param1、2也不得有默认值。
12、函数重载也叫函数多态(polymorphism)重载函数必须有不同的参数类型、参数个数或兼而有之。重载函数的返回类型可以相同也可以不同。
注意:如果两个函数的函数名和参数列表都相同,只有返回类型不同,不算函数重载,将导致编译错误。
13、内联函数直接将函数代码赋值到调用函数中,这样调用函数时便不需要跳转,有助于提高效率。内联函数在函数声明前加上inline。
注意:如果内联函数调用次数多,内联代码将被复制到每一次调用处,这样,可执行程序变大了,速度可能变得更慢。因此除非函数只 有一两条语句,否则不要将函数声明为内联。如果没有把握,不要轻易使用关键字inline。