C++从入门到精通 第1章:C++基本语言要素

366 阅读4分钟

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整型,表示整数4231-2^{31}~23112^{31}-1
long长整型,表示整数4231-2^{31}~23112^{31}-1
short短整型,表示整数2215-2^{15}~21512^{15}-1
unsigned int无符号整型,表示非负整数400~23212^{32}-1
unsigned long无符号长整型,表示非负整数400~23212^{32}-1
unsigned short无符号短整型,表示非负整数200~21612^{16}-1
long long64位整型,表示整数8263-2^{63}~26312^{63}-1
unsigned long long64位整型,表示非负整数800~26412^{64}-1
float单精度实数型,表示实数43.4×1038-3.4×10^{-38}~3.4×10383.4×10^{38}
double双精度实数型,表示实数81.7×10308-1.7×10^{-308}~1.7×103081.7×10^{308}
char字符型,表示字符1128-128~127127
unsigned char无符号字符型,表示字符100~255255
bool布尔型,表示真假1truefalsetrue或false

自定义类型

以后讲结构、联合、类时会讲怎么定义、使用

数据类型自动转换

在赋值号两边,左边的类型与右边的类型不同但兼容时,就会把右边的值转换成左边的类型的值,否则编译器会报错

常量

什么是常量

程序执行过程中,不能发生改变的东西

分类

整型常量

十进制:不允许有前导“0”

十六进制:在十六进制数之前加“0x”

八进制:在八进制数之前加“0”

注:比0xffffffff还大的常量末尾加上“LL”

浮点型常量

普通:整数.小数

科学:小数e整数

布尔型常量

布尔型常量只有两种取值:true和false

字符型常量

字符型常量由“ '' ”(单引号)括起来

还有一类字符常量,它们以“\”开头,它们统称转义字符

转义字符含义ASCII码
\n换行,将输出位置移到下一行开头1010
\r回车,将输出位置移到本行开头1313
\t制表符,将输出位置调到下一个制表位置。制表位置一般是8的倍数加199
\b退格,输出位置回退一个字符88
\\反斜杠“\”9292
\'单引号“ ' ”3939
\0空字符00
\dddddd是一个八进制数,代表此字符的ASCII码ddd(八进制)ddd(八进制)
\xhhhh是一个十六进制数,代表此字符的ASCII码hh(十六进制)hh(十六进制)

字符串常量

字符串常量由“ "" ”(双引号)引起来

符号常量

符号常量:用一个标识符表示某一个常量

定义格式如下

#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三目运算符
sizeofsizeof(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.要积极使用“()”来明确表达式的运算顺序