常量

整型常量

0开头为八进制,0x开头为十六进制,其余为十进制。

1
2
3
4
5
6
7
8
9
10
#include<iostream>
using namespace std;

int main()
{
cout<<11<<endl;
cout<<011<<endl;
cout<<0x11<<endl;
return 0;
}
1
2
3
4
5
6
7
11
9
17

--------------------------------
Process exited after 0.04045 seconds with return value 0
请按任意键继续. . .

整型常量加后缀(不分大小写),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
2
3
4
5
6
7
8
9
#include<iostream>
using namespace std;

int main()
{
cout<<'\141'<<endl;//8进制的141=十进制的97
cout<<'\x61'<<endl;//16进制的61=十进制的97
return 0;
}
1
2
3
4
5
6
a
a

--------------------------------
Process exited after 0.04585 seconds with return value 0
请按任意键继续. . .

符号常量

为常量命名就是符号常量,符号常量声明时一定要赋值,在程序中间也不能改变其值。

变量

变量的声明和定义

变量的声明不一定分配内存,变量的定义会分配内存。

一般变量的声明=变量的定义,但声明外部变量时例外。

声明变量时赋值可以这样int a(3),等价于int a=3。

变量的存储类型

存储类型 特点
auto 堆栈方式分配内存,为暂时性存储,存储空间可被若干变量多次覆盖使用
register 存放在通用寄存器中
extern 在所有函数和程序段中都可以使用
static 在内存中的固定地址存放,在整个程序运行期间都有效

运算符与表达式

赋值表达式

赋值表达式的结合性从右向左

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;

int main()
{
int a,b,c;
a=5;
cout<<a<<endl;

a=b=c=5;
cout<<a<<endl;

a=5+(c=6);
cout<<a<<endl;

a=(b=4)+(c=6);
cout<<a<<endl;

return 0;
}
1
2
3
4
5
6
7
8
5
5
11
10

--------------------------------
Process exited after 0.05756 seconds with return value 0
请按任意键继续. . .

位运算

按位与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后面都要有breakdefault除外。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;

int main()
{
int a;
cin>>a;
switch(a)
{
case 0:
cout<<"这是情况0"<<endl;
break;
case 1:
cout<<"这是情况1"<<endl;
break;
default:
cout<<"这是其他情况"<<endl;
}
return 0;
}
1
2
3
4
5
6
10
这是其他情况

--------------------------------
Process exited after 4.429 seconds with return value 0
请按任意键继续. . .

自定义数据类型

  • 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)一起定义就会出错。