前置基本知识
本篇文章主要包含三大结构(顺序,选择,循环)前的一些语言通用的内容。
c++基本结构
#include <iostream>
using namespace std;
int main()
{
return 0;
}
首先,我们导入io流头文件,用于输入输出数据。在入门阶段输出为cout,输入为cin。然后,命名空间曝光,可以简单认为让整个程序认识后续使用的头文件中的函数 。然后定义一个入口函数就可以了,代表整个程序从这开始。
注释
C++中注释和C语言差不多,使用//来单行注释,/* */来多行注释。
一,变量
数据类型
整型(int) :整数,一般四个字节
浮点型(float) : 小数,一般四个字节
字符型(char) :单字符,一般一个字节
字符串型(string) :字符串,多个字符,字节不定
布尔型(bool) : 一般用于逻辑判断(true/false),一个字节。
声明变量
int a;
float b;
char c;
double e;
bool f;
string h;//string使用时要导入string头文件
//当然可以直接声明时直接初始化
int a = 1;
变量赋值
int a = 1;
//修改a的值
a = 2;//这就是变量赋值
变量大小
#include <iostream>
using namespace std;
int main()
{
cout << sizeof(int) << endl;
cout << sizeof(short int) << endl;
cout << sizeof(long long int) << endl;
cout << sizeof(float) << endl;
cout << sizeof(double) << endl;
cout << sizeof(char) << endl;
cout << sizeof(bool) << endl;
return 0;
}
二,常量
常量就是不会改变的值,比如圆周率,一年的月份等等。
宏常量
#define 常量名 值
#define PI 3.14
当后续程序使用PI时会自动替换成3.14。和去一个别名差不多。常量名一般使用大写字母。
const修饰
除了使用宏定义,我们可以使用const来修饰一个变量使其从变量变成常量,后续的赋值将会发生错误。
const 数据类型 变量名 = 值
const int a = 20;
三,标识符命名
C++命名规则
C++规定给标识符(变量、常量、函数、结构体、类等)命名时,必须遵守以下规则。
- 在名称中只能使用字母字符、数字和下划线;
- 名称的第一个字符不能是数字;
- 名称区分大写字符与小写字符;
- 不能将C++关键字用作名称;
- 以下划线和大写字母打头的名称被保留给编译器及其使用的资源使用,如果违反了这一规则,会导致行为的不确定性。
- C++对名称的长度没有限制,但有些平台可能有长度限制(64字符)。
C++提倡有一定含义的名称(望名知义)。
C++关键字
关键词也叫保留词,是C++预先保留的标识符。
asm | do | if | return | typedef |
auto | double | inline | short | typeid |
bool | dynamic_cast | int | signed | typename |
break | else | long | sizeof | union |
case | enum | mutable | static | unsigned |
catch | explicit | namespace | static_cast | using |
char | export | new | struct | virtual |
class | extern | operator | switch | void |
const | false | private | template | volatile |
const_cast | float | protected | this | wchar_t |
continue | for | public | throw | while |
default | friend | register | true | |
delete | goto | reinterpret_cast | try |
四,IO流
输出cout
#include <iostream>
using namespace std;
int main()
{
cout << sizeof(int) << endl;
cout << sizeof(short int) << endl;
cout << sizeof(long long int) << endl;
cout << sizeof(float) << endl;
cout << sizeof(double) << endl;
cout << sizeof(char) << endl;
cout << sizeof(bool) << endl;
return 0;
}
cout对长度没有限制,可以直接进行拼接
cout << "your name is " << name << "||" << "your age is " << age << endl;
输出cin
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
int age;
char gender;
string occupation;
cout << "Enter Your Name:" << endl;
cin >> name;
cout << "Enter Your Age:" << endl;
cin >> age;
cout << "Enter Your Gender:" << endl;
cin >> gender;
cout << "Enter Your Occupation:" << endl;
cin >> occupation;
cout << "Name:" << name << "||" << "Gender:" << gender << "||" << "Age:" << age << "||" << "Occupation:" << occupation;
return 0;
}
cin >> 变量名
五,算数运算
运算符 | 描述 |
+ | 两个数相加。 |
- | 一个数减另一个数。 |
* | 两个数相乘。 |
/ | 分子除以分母。 |
% | 取模运算,整除后的余数。 |
注意:
- 整数进行除法运算时,如果分母为0,程序将异常退出;
- 浮点数进行除法运算时,如果分母为0.0,将得到inf(infinite,无穷大);
- 两个整数进行除法运算时,将舍去小数部分,得到一个整数;
- 整数与浮点数进行除法运算时,得到的结果是浮点数;
- 进行除法运算时,在整数前面加(float)或(double)可以将整数转换为float或double类型;
- 取模运算只能用于整数(分母也不能为0)。
自增与自减
运算符 | 描述 |
++变量名 | 先把变量的值加1,然后再执行表达式。 |
变量名++ | 先执行表达式,再把变量的值加1。 |
--变量名 | 先把变量的值减1,然后再执行表达式。 |
变量名-- | 先执行表达式,再把变量的减1。 |
#include <iostream>
using namespace std;
int main()
{
int a(10); // C++风格的赋值方法,可以省略等号
a *= 10;
cout << a << endl; // 100
a /= 2;
cout << a << endl; // 50
cout << ++a << endl; // 51
cout << a << endl; // 51
cout << a++ << endl; // 51
cout << a << endl; // 52
return 0;
}
六,赋值
赋值运算
运算符 | 示例 | 描述 |
= | c = a + b; 将把a + b的值赋给c。 | 把右边操作数的值赋给左边操作数。 |
+= | c += a; 相当于 c = c + a; | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数。 |
-= | c -= a; 相当于 c = c - a; | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数。 |
*= | c *= a; 相当于 c = c * a; | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数。 |
/= | c /= a; 相当于 c = c / a; | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数。 |
%= | c %= a; 相当于 c = c % a; | 求余数且赋值运算符,求两个操作数的模赋值给左边操作数,浮点数不适用取余数。 |
注意:
- 字符串(string)只能使用等号(=)赋值,不能使用其它的赋值运算符;
- 浮点数不能使用%=运算符;
- 等号(=)赋值运算符可以连续使用;
- 如果赋值运算符两边操作数的数据类型不同,C++将自动转换数据类型,可能会损失精度,也可能超出取值范围,如果转换不成功,编译时会报错。
七,关系运算
用于比较两个表达式的值,运算的结果为1-true和0-false。
关系 | 数学的表示 | C++的表示 |
等于 | = | == |
不等于 | ≠ | != |
小于 | < | < |
小于等于 | ≤ | <= |
大于 | > | > |
大于等于 | ≥ | >= |
注意:
- 关系运算符的两边可以是数值,也可以是表达式;
- 用std::cout输出关系运算表达式时,关系表达式要加括号;
- 关系运算也适用于字符串(string),字符串常用的关系运算是==和!=,其它的基本上不用。
八,逻辑运算
运算符 | 术语 | 示例 | 结果 |
&& | 逻辑与 | a&&b; | 如果a和b都为真,则结果为真,否则为假。 |
|| | 逻辑或 | a||b; | 如果a和b中有一个为真,则结果为真,二者都为假时,结果为假。 |
! | 逻辑非(反) | !a; | 如果a为假,则!a为真; 如果a为真,则!a为假。 |
注意:
- 逻辑运算符的两边可以是数值,也可以是表达式;
- 用std::cout输出逻辑运算表达式时,逻辑表达式要加括号;
- 在实际开发中,逻辑运算的多重组合是重点。
九,逗号运算
把一行语句中的多个表达式连接起来,程序将从左到右执行表达式。
语法:表达式一,表达式二,……,表达式n;
逗号运算常用于声明多个变量。
int a,b; // 声明变量a和b。
int a=10,b=20; // 声明变量a和b并初始化
十,优先级
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 |
1 | [] | 下标 | 地址[表达式] | 左到右 |
() | 圆括号 | (表达式)/函数名(形参表) | ||
. | 成员选择(对象) | 对象.成员名 | ||
-> | 成员选择(指针) | 对象指针->成员名 | ||
2 | - | 负号运算符 | -表达式 | 右到左 |
(类型) | 强制类型转换 | (数据类型)表达式 | ||
++ | 前置自增运算符 | ++变量名 | ||
++ | 后置自增运算符 | 变量名++ | ||
-- | 前置自减运算符 | --变量名 | ||
-- | 后置自减运算符 | 变量名-- | ||
* | 取值运算符 | *指针变量 | ||
& | 取地址运算符 | &变量名 | ||
! | 逻辑非运算符 | !表达式 | ||
~ | 按位取反运算符 | ~表达式 | ||
sizeof | 长度运算符 | sizeof(表达式) | ||
3 | / | 除 | 表达式/表达式 | 左到右 |
* | 乘 | 表达式*表达式 | ||
% | 余数(取模) | 整型表达式/整型表达式 | ||
4 | + | 加 | 表达式+表达式 | 左到右 |
- | 减 | 表达式-表达式 | ||
5 | << | 左移 | 变量 | 左到右 |
>> | 右移 | 变量>>表达式 | ||
6 | > | 大于 | 表达式>表达式 | 左到右 |
>= | 大于等于 | 表达式>=表达式 | ||
< | 小于 | 表达式 | ||
<= | 小于等于 | 表达式 | ||
7 | == | 等于 | 表达式==表达式 | 左到右 |
!= | 不等于 | 表达式!= 表达式 | ||
8 | & | 按位与 | 表达式&表达式 | 左到右 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 |
10 | | | 按位或 | 表达式|表达式 | 左到右 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 |
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 |
/= | 除后赋值 | 变量/=表达式 | ||
*= | 乘后赋值 | 变量*=表达式 | ||
%= | 取模后赋值 | 变量%=表达式 | ||
+= | 加后赋值 | 变量+=表达式 | ||
-= | 减后赋值 | 变量-=表达式 | ||
<<= | 左移后赋值 | 变量 | ||
>>= | 右移后赋值 | 变量>>=表达式 | ||
&= | 按位与后赋值 | 变量&=表达式 | ||
^= | 按位异或后赋值 | 变量^=表达式 | ||
|= | 按位或后赋值 | 变量|=表达式 | ||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 |
注意:
- 如果不确定运算符的优先级,可以加括号;
- 多用括号,让代码的可读性更好。