C++的标识符
什么是标识符
给一个变量、函数、类、结构等取一个名字,这个名字就是标识符
命名规则
标识符中只能出现字母、数字和下划线,且第一个字母不能是数字,还不能是C++中的关键字
注意
1.C++是对大小写敏感的,即两个标识符可以包含字母相同,大小写不同
2.一些编译器自己用到的一些标识符是以双下划线开头的,所以最好不要以双下划线开头作为变量名,以免冲突
为什么标识符开头不能是数字
以数字开头的标识符,可能与一些常量的表示方法冲突,而且,编译器也得根据“类型名”和“=”才能判断这是个标识符,这样很费时间,代码可读性也会变差,所以才会有这个硬性规定
示例
name,num,x1,y1,id,number,NUMBER,Number
C++中的关键字
什么是关键字
C++预留的单词,不能作为标识符
C++中的关键字
auto
bool break
case catch char class const const_cast continue
default delete do double dynamic_cast
else enum explicit extern
false float for friend
goto
if inline int
long
namespace new
operator
private protected public
register reinterpret_cast return
short signed sizeof static static_cast struct switch
template this throw true try typedef typeid typename
union unsigned using
virtual void volatile
while
注意
一些编译器还会预留index、list、link这几个单词,最好不要把他们用做标识符
Hello,World
下面的程序可以输出“Hello,World”
1. #include<iostream>
2. using namespace std;
3. int main()
4. {
5. cout<<"Hello,World";
6. return 0;
7. }
输出:
Hello,World
自己写程序时把第5行换成别的即可
第5行是输出操作,输出“Hello,World”
cout是用来输出的对象,用“<<”连接cout和要输出的对象即可
cout可以输出变量的值、字符串、数字、转义符和endl(换行)
add
下面的程序可以从键盘输入两个整数,输出它们的和
1. #include<iostream>
2. using namespace std;
3. int main()
4. {
5. int a,b,c;
6. cin>>a>>b;
7. c=a+b;
8. cout<<c;
9. return 0;
10. }
输入:
3 4
输出:
7
第5行定义了3个整形变量:a,b,c
第6行是输入操作,从键盘输入
cin是用来输入的对象,用“>>”连接cin和要输入的对象即可
cin可以输入整数、浮点数(小数)、字符串
第7行是赋值操作,将a+b的值赋值给c
第8行,输出c的值
其实也可以直接输出a+b的值,代码如下
1. #include<iostream>
2. using namespace std;
3. int main()
4. {
5. int a,b;
6. cin>>a>>b;
7. cout<<a+b;
8. return 0;
9. }
在C++中,是以“;”作为分隔符的,每一行写几条语句都行
但是为了保证代码的可读性,还是一行写一条语句好
变量
什么是变量
给存放数据的区域取个名字(标识符)
变量的定义
语法
类型名 变量名1,变量名2,···, 变量名n;
注意
变量名最好见名知义
为什么变量要先定义后使用
这是因为不同类型的变量所占字节数不同,如果不先定义,编译器就无法分配空间
例子
int number;
变量的初始化
什么是初始化
在定义变量时,给它赋初值
注意
1.C++不允许同名的变量定义多次,否则会引发重复定义的错误
2.一般来说,局部变量在定义时不初始化,值是随机的
为什么不允许同名的变量定义多次
C++保存变量及其地址时,会用一个映射表,把变量的名字与它的地址一一对应,如果同名变量多次定义,就会出现同一个变量名对应着两个地址,引发二义性错误
为什么局部变量没有初始化值是随机的
C++中,局部变量是保存在栈上的,这个空间原本的值是什么,变量的值就是什么,因此是随机的
示例
int a=4,b=3,c;
变量的赋值
语法
变量名=值;
作用
将变量的值变成“值”
注意
这里的“值”也可以是一个表达式
常变量
什么是常变量
在定义变量时,在类型名前面加上“const”关键字,变量就变成常变量
注意
常变量只能在定义时初始化,以后不能修改,否则会编译错误
C++的数据类型
基础数据类型
| 类型名 | 含义 | 字节数 | 取值范围 |
|---|---|---|---|
| int | 整型,表示整数 | 4 | ~ |
| long | 长整型,表示整数 | 4 | ~ |
| short | 短整型,表示整数 | 2 | ~ |
| unsigned int | 无符号整型,表示非负整数 | 4 | ~ |
| unsigned long | 无符号长整型,表示非负整数 | 4 | ~ |
| unsigned short | 无符号短整型,表示非负整数 | 2 | ~ |
| long long | 64位整型,表示整数 | 8 | ~ |
| unsigned long long | 64位整型,表示非负整数 | 8 | ~ |
| float | 单精度实数型,表示实数 | 4 | ~ |
| double | 双精度实数型,表示实数 | 8 | ~ |
| char | 字符型,表示字符 | 1 | ~ |
| unsigned char | 无符号字符型,表示字符 | 1 | ~ |
| bool | 布尔型,表示真假 | 1 |
自定义类型
以后讲结构、联合、类时会讲怎么定义、使用
数据类型自动转换
在赋值号两边,左边的类型与右边的类型不同但兼容时,就会把右边的值转换成左边的类型的值,否则编译器会报错
常量
什么是常量
程序执行过程中,不能发生改变的东西
分类
整型常量
十进制:不允许有前导“0”
十六进制:在十六进制数之前加“0x”
八进制:在八进制数之前加“0”
注:比0xffffffff还大的常量末尾加上“LL”
浮点型常量
普通:整数.小数
科学:小数e整数
布尔型常量
布尔型常量只有两种取值:true和false
字符型常量
字符型常量由“ '' ”(单引号)括起来
还有一类字符常量,它们以“\”开头,它们统称转义字符
| 转义字符 | 含义 | ASCII码 |
|---|---|---|
| \n | 换行,将输出位置移到下一行开头 | |
| \r | 回车,将输出位置移到本行开头 | |
| \t | 制表符,将输出位置调到下一个制表位置。制表位置一般是8的倍数加1 | |
| \b | 退格,输出位置回退一个字符 | |
| \\ | 反斜杠“\” | |
| \' | 单引号“ ' ” | |
| \0 | 空字符 | |
| \ddd | ddd是一个八进制数,代表此字符的ASCII码 | |
| \xhh | hh是一个十六进制数,代表此字符的ASCII码 |
字符串常量
字符串常量由“ "" ”(双引号)引起来
符号常量
符号常量:用一个标识符表示某一个常量
定义格式如下
#define 常量名 常量值
运算符
| 运算符 | 作用 | 类型 |
|---|---|---|
| + | a+b:返回a+b的值 | 算术运算符 |
| - | a-b:返回a-b的值 | 算术运算符 |
| * | a*b:返回a×b的值 | 算术运算符 |
| / | a/b:返回a除以b的值(精度保留a和b中精度较高的) | 算术运算符 |
| % | a%b:返回a模b的值(a和b都是整数) | 算术运算符 |
| 后置++ | a++:将a的值增加1,返回a | 算术运算符 |
| 前置++ | ++a:将a的值增加1,返回a+1 | 算术运算符 |
| 后置-- | a--:将a的值减去1,返回a | 算术运算符 |
| 前置-- | --a:将a的值减去1,返回a-1 | 算术运算符 |
| + | +a:返回正a | 算数运算符 |
| - | -a:返回负a | 算数运算符 |
| > | a>b:判断a是否大于b | 条件运算符 |
| < | a<b:判断a是否小于b | 条件运算符 |
| >= | a>=b:判断a是否大于等于b | 条件运算符 |
| <= | a<=b:判断a是否小于等于b | 条件运算符 |
| == | a==b:判断a是否等于b | 条件运算符 |
| != | a!=b:判断a是否不等于b | 条件运算符 |
| && | a&&b:判断a与b是否为真 | 逻辑运算符 |
| || | a||b:判断a或b是否为真 | 逻辑运算符 |
| ! | !a:判断!a是否为真 | 逻辑运算符 |
| & | a&b:返回a按位与b | 位运算符 |
| | | a|b:返回a按位或b | 位运算符 |
| ~ | ~a:返回a按位反 | 位运算符 |
| a^b:返回a按位异或b | 位运算符 | |
| << | a<<b:返回a左移b位的值(高位丢弃,低位补零) | 位运算符 |
| >> | a>>b:返回a右移b位的值(低位丢弃) | 位运算符 |
| = | a=b:将b赋值给a | 赋值运算符 |
| += | a+=b:将a+b赋值给a | 赋值运算符 |
| -= | a-=b:将a-b赋值给a | 赋值运算符 |
| *= | a*=b:将a×b赋值给a | 赋值运算符 |
| /= | a/=b:将a/b赋值给a | 赋值运算符 |
| %= | a%=b:将a%b赋值给a | 赋值运算符 |
| &= | a&=b:将a&b赋值给a | 赋值运算符 |
| |= | a|=b:将a|b赋值给a | 赋值运算符 |
| ^= | a^=b:将a^b赋值给a | 赋值运算符 |
| <<= | a<<=b:将a<<b赋值给a | 赋值运算符 |
| >>= | a>>=b:将a>>b赋值给a | 赋值运算符 |
| ?: | a?b:c:如果a成立,返回b,否则返回c | 三目运算符 |
| sizeof | sizeof(a):返回a所占的字节数 | 其它 |
| new | 分配空间 | 其它 |
| delete | 析构空间 | 其它 |
| (类型名) | (类型名)a:将a强制转换成“类型名”型 | 其它 |
| , | 表达式1,表达式2,······表达式n:连接几个表达式 | 其它 |
| () | 优先计算某个表达式 | 其它 |
| [] | a[n]:返回a中下标位n的元素 | 其它 |
| . | a.标识符:调用a的“标识符” | 其它 |
| -> | a->标识符:返回a指向的东西 | 其它 |
| * | *a:指针指向的内容 | 其它 |
| & | &a:a的地址 | 其它 |
| :: | 在一个作用域里的东西 | 其它 |
注释
什么是注释
在“//”后面的文字就是注释,它不受任何语法限制
注释还可以是由“/*”和“*/”组成
注意
注释一般写在代码块的上一行,或者行末,这样有助于别人理解
小结
1.C++标识符由字母、数字、下划线组成,最好见名知意
2.变量要先定义后使用,在定义时可以初始化
3.对于程序中大量出现的常量,可以把它定义成常变量,方便后面修改
4.算数运算表达式的精度,是由精度最高的操作数决定的
5.逻辑表达式是短路计算,当可以判断表达式的值时会立即返回
6.要积极使用“()”来明确表达式的运算顺序