C++拾遗1
常量
整型常量
0开头为八进制,0x开头为十六进制,其余为十进制。
1 |
|
1 | 11 |
整型常量加后缀(不分大小写),L表示长整型,U表示无符号型,L和U可以同时用。
实型常量
一般形式:12.5,-12.5。
指数形式:0.345E+2(即0.345×10^2),0.345E-3(即0.345×10^(-3)),其中E大小写无所谓。
实型常量默认为double,如果加上后缀F(或f)可变成float型。
字符常量
字符可用8进制或16进制的ASCII码表示。\nnn为8进制形式,\xnnn为十六进制形式。
1 |
|
1 | a |
符号常量
为常量命名就是符号常量,符号常量声明时一定要赋值,在程序中间也不能改变其值。
变量
变量的声明和定义
变量的声明不一定分配内存,变量的定义会分配内存。
一般变量的声明=变量的定义,但声明外部变量时例外。
声明变量时赋值可以这样int a(3),等价于int a=3。
变量的存储类型
存储类型 | 特点 |
---|---|
auto | 堆栈方式分配内存,为暂时性存储,存储空间可被若干变量多次覆盖使用 |
register | 存放在通用寄存器中 |
extern | 在所有函数和程序段中都可以使用 |
static | 在内存中的固定地址存放,在整个程序运行期间都有效 |
运算符与表达式
赋值表达式
赋值表达式的结合性从右向左。
1 |
|
1 | 5 |
位运算
按位与a&b,按位或a|b,按位异或a^b,按位取反~a。
左移a<<1,右移a>>1.
数据类型转换
二元运算符要求两个操作数类型相同,不同的话会进行隐含转换,低类型的数据转换为高类型的数据。
显式转换:如将float a=3.14
转换为int
再赋值给b
,则可写为b=int (a)
或b=(int) a
。这种转换只是一次性的,并不改变a的类型和值。
算法的基本控制结构
switch
switch
后面可以跟整型、字符型和枚举型。
每个case
后面都要有break
,default
除外。
1 |
|
1 | 10 |
自定义数据类型
-
enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};
-
枚举元素不能单独捞出来赋值,
SUN=1
这种是错误的。 -
枚举元素默认值为0,1,2,…,但也可以自定义,如
enum Weekday{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
,MON
以后顺序+1。 -
可以直接赋给整型
int num=SUN;
,整型转enum
需要显式转换Weekday day=Weekday(2);
,则day==TUE
为真。
函数
函数原型的定义包含了函数原型的声明,但是如果想在函数定义前调用函数,则需要先声明。
声明可以在所有函数之前,也可以在主调函数内部(只在该函数内部有效)。
声明的写法可以是返回类型 函数名(type1,type2,typen)
,即不写形参名,但是不推荐这种写法。
函数的参数传递
函数未被调用时,形参不占有实际的内存空间。函数被调用时才在形参分配存储单元。
值传递
函数调用时,用实参初始化形参,之后实参和形参脱离关系。
引用传递
引用是一种特殊类型的变量,可以被认为是另一个变量的别名。
int i;int &ri=i;
则操作ri
就实际上就是操作i
。
-
声明引用必须初始化,指向一个已存在的对象。
-
一旦被初始化,不能改为指向其他对象。
-
引用用作形参,则形实结合,对形参的操作等于对实参的操作。
内联函数
内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处(效率高)。
适合功能简单、规模小又频繁使用的函数。但是内联函数不能有循环语句和switch语句。
带默认形参值的函数
如果有多个形参,则有默认值形参要放到最后。
如果一个函数在定义之前又有原型声明,默认形参值需要在原型声明中给出,定义中不能再出现默认形参值。
函数重载
重载函数的形式参数必须:个数不同或者类型不同。
如果多个函数存在函数名相同,形参个数、类型也对应相同,即使返回类型不同,也会编译出错。
int add(int x,int y)
和void add(int x int y)
或void add(int a, int b)
一起定义就会出错。