文章目录
变量
- 变量存在的意义:方便我们管理内存空间
常量
- #define 宏常量 :#define 常量名 常量值
- 通常在文件上方定义,表示一个常量
- const修饰的变量 : const 数据类型 变量名 = 常量值
- 通常在变量定义前加关键字 const ,修饰该变量为常量,不可修改
关键字
-
C++预先保留的单词(标识符)
-
在定义变量的时候不要使用关键字
SIZEOF关键字
利用sizeof关键字可以统计数据类型所占内存的大小
sizeof(数据类型/变量)
标识符命名规则
- 标识符不能是关键字
- 标识符只能是字母、数字、下划线组成
- 第一个字符必须为字母或下划线
- 标识符中字母区分大小写
建议:给标识符命名时,争取做到见名知意,方便自己和他人阅读
数据类型
整型
短整型
short num1 = 10;
整型
int num2 = 10;
长整型
long num3 = 10;
长长整型
long long num4 = 10;
浮点型
用于表示小数
小数一般默认双精度
单精度
float f1 = 3.14f;
双精度
double d1 = 3.14;
示例:
//默认情况下 输入一个小数 会显示6位有效数字
// 单精度
float f1 = 3.1415926535f;
cout << f1 << endl;
// 双精度
double d1 = 3.1415926535;
cout << f1 << endl;
// 统计占用空间
cout << "float占有内存空间:" << sizeof(float) << endl; //4
cout << "double占有内存空间:" << sizeof(double) << endl; //8
// 科学计数法
float f2 = 3e2;
cout << f2 << endl; //300
float f3 = 3e-2;
cout << f3 << endl; //0.03
字符型
字符型变量用于显示单个字符
C/C++中字符型变量值占用1个字节
字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元
示例:
// 创建方式
char ch = 'a';
cout << ch << endl;
//内存大小
cout << sizeof(char) << endl;
//常见错误
//char ch1 = "b"; //创建字符型变量不能使用双引号
//char ch1 = 'abcdef';//创建字符型变量只能有一个字符
//对应ASCII编码
cout << (int)ch << endl;//a = 97,b = 98
转义字符
用于表示一些不能显示出来的ASCII字符
示例:
//转义字符
//换行 \n
cout << "qwer\n";
//反斜杠 \\
cout << "\\" << endl;
//水平制表 \t 8个位置
cout << "qwe\trttyuui" << endl;
cout << "qwert\ttyuui" << endl;
cout << "q\twerttyuui" << endl;
输出结果:
//水平制表 对齐效果
/*
* qwe rttyuui
qwert tyuui
q werttyuui
*/
字符串型
用于表示一串字符
- C风格字符串 char 变量名[] = “字符串”;
char ch1[] = "hello word";
- C++风格 string 变量名 = “字符串” ;
string ch2 = "helloworld";
布尔类型
布尔数据代表真或假的值
非零即真
示例:
bool flag = true;
cout << flag << endl; //1
flag = false;
cout << flag << endl; //0
cout << sizeof(bool) << endl;//1
数据输入
用于从键盘获取数据
关键字 : cin
cin >> 变量;
示例:
//整型
int a = 0;
cout << "请给整型变量a赋值" << endl;
cin >> a;
//浮点型
double b = 3.14;
cout << "请给浮点型变量b赋值" << endl;
cin >> b;
//字符型
char c = 'c';
cout << "请给字符型变量c赋值" << endl;
cin >> c;
//字符串型
string d = "qwer";
cout << "请给字符串型变量d赋值" << endl;
cin >> d;
//布尔类型
bool e = true;
cout << "请给布尔类型变量e赋值" << endl;
cin >> e;
cout << a << b << c << d << e << endl;
运算符
只有整型变量才可以进行取模(%)运算
流程控制结构
C/C++支持最基本的三种运行结构:顺序结构、选择结构、循环结构
- 顺序结构:程序按顺序执行,不发生跳转
- 选择结构:依据条件是否满足,有选择的执行相应的功能
- 循环结构:依据条件是否满足,循环多次执行某段代码
数组
数组名的用途
- 可以统计整个数组在内存中的长度 sizeof(数组名)
- 可以获取数组在内存中的首地址
数组名是一个常量,不可进行赋值操作
示例:
int arr[] = { 1,23,3,4,7,5,7 };
cout << "整个数组占用的空间:" << sizeof(arr) << endl;
cout << "总个数:" << sizeof(arr) / sizeof(arr[0]) << endl;
int i = 1;
for (auto n : arr)
{
cout << "数组" << i++ << "内容:" << n << endl;
}
cout << "数组的首地址:" << arr << endl;
int j = 0;
for (auto a : arr)
{
cout << "数组第"<< j + 1 <<"个元素的首地址:" << (int)&arr[j] << endl;
//默认十六进制,(int)转化十进制
j++;
}
输出结果:
/*
*整个数组占用的空间:28
*总个数:7
*数组1内容:1
*数组2内容:23
*数组3内容:3
*数组4内容:4
*数组5内容:7
*数组6内容:5
*数组7内容:7
*数组的首地址:000000B44190FAB8
*数组第1个元素的首地址:1100020408
*数组第2个元素的首地址:1100020412
*数组第3个元素的首地址:1100020416
*数组第4个元素的首地址:1100020420
*数组第5个元素的首地址:1100020424
*数组第6个元素的首地址:1100020428
*数组第7个元素的首地址:1100020432
*/
一维数组
一维数组的定义方式:
- 数据类型 数组名 [数组长度];
- 数据类型 数组名 [数组长度] = {值1,值2…};
- 数据类型 数组名 [] = {值1,值2…};
如果在初始化数据的时候,没有全部填写,会用0来填补剩余数据
示例:
int arr[5];
arr[0] = 0;
arr[1] = 10;
arr[2] = 20;
arr[3] = 30;
arr[4] = 40;
for (int i = 0; i < 5; i++)
{
cout << arr[i] << endl;
}
int arr1[5] = { 1,2,3,4 };
//如果在初始化数据的时候,没有全部填写,会用0来填补剩余数据
int arr2[] = { 1,3,5,4};
二维数组
二维数组就是在一维数组上,多加了一个维度
一维数组的定义方式:
- 数据类型 数组名 [行数] [列数];
- 数据类型 数组名 [行数] [列数] = { {数据1,数据2},{数据3,数据4} };
- 数据类型 数组名 [行数] [列数] = { 数据1,数据2,数据3,数据4 … };
- 数据类型 数组名 [] [列数] = { 数据1,数据2,数据3,数据4 … };
建议使用第二种更加直观,有利于提高代码的可读性
示例:
int main()
{
//定义方式
//1. 数据类型 数组名[行数][列数];
int arr[2][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
//外侧循环打印行数,内测循环打印列数
for (rsize_t i = 0; i < 2; i++)
{
for (size_t j = 0; j < 3; j++)
{
cout << arr[i][j] << "\t";
// \t 制表符
}
cout << "\n";
}
//2. 数据类型 数组名[行数][列数] = { {数据1,数据2},{数据3,数据4} };
int arr1[2][3] = {
{1,2,3},
{4,5,6}
};
//3. 数据类型 数组名[行数][列数] = { 数据1,数据2,数据3,数据4 ... };
int arr2[2][3] = { 1,2,3,4,5,6 };//只要写了列数 , 代码可以自动识别列
//4. 数据类型 数组名[][列数] = { 数据1,数据2,数据3,数据4 ... };
int arr3[][3] = { 1,2,3,4,5,6 };//只要写了列数 , 代码可以自动识别列
return 0;
}
输出结果:
//1 2 3
//4 5 6
排序
元素逆置
数组元素逆置示例:
int arr[] = { 1,2,5,4,3 };
int start = 0; // 起点元素的下标
int end = sizeof(arr) / sizeof(arr[0]) - 1; //末尾元素的下标
int f = sizeof(arr) / sizeof(arr[0]); //数组元素个数
int temp = 0;//临时存储变量
cout << "逆置前的结果:" << endl;
for (size_t i = 0; i < f; i++)
{
cout << arr[i] << " ";
}
while (start < end)
{
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
cout << endl;
cout << "逆置后的结果:" << endl;
for (auto n : arr)
{
cout << n << " ";
}
/*
逆置前的结果:
1 2 5 4 3
逆置后的结果:
3 4 5 2 1
*/
冒泡排序
冒泡排序示例:
int arr[] = { 1,2,5,4,3 };
int start = 0; // 起点元素的下标
int end = sizeof(arr) / sizeof(arr[0]) - 1; //末尾元素的下标
int f = sizeof(arr) / sizeof(arr[0]); //数组元素个数 f = 5
int temp = 0;//临时存储变量
for (int j = 0; j < (f - 1); j++)
{
for (int z = 0; z < (f - 1 - j) ; z++)
{
if (arr[z] > arr[z+1])
{
//arr[z] < arr[z+1] 换成 > 第一个数组元素 将 造成 数据溢出
temp = arr[z];
arr[z] = arr[z + 1];
arr[z + 1] = temp;
}
}
}
cout << endl;
cout << "排序后结果:" << endl;
for (size_t x = 0; x < f; x++)
{
cout << arr[x] << " ";
}
return 0;
输出结果:
/*
排序前的结果:
1 2 5 4 3
排序后结果:
1 2 3 4 5
*/
函数
将一段经常使用的代码封装起开,减少重复代码
当我们做值传递的时候,函数的形参发生改变,并不影响实参
函数的定义
- 返回值类型
- 函数名
- 参数列表
- 函数体语句
- return 表达式
如果函数不需要返回值,声明的时候可以写*void
语法:
返回值类型 函数名 (参数列表)
{
函数体语句
return 表达式
}
int add(int num1, int num2)
{
int sum = num1 + num2;
return sum;
}
函数的常见样式
- 无参无返
- 有参无返
- 无参有返
- 有参有返
示例:
//1. 无参无返
void test01()
{
cout << "this01" << endl;
}
//2. 有参无返
void test02(int a)
{
cout << a << endl;
return;
}
//3. 无参有返
int test03()
{
return 1000;
}
//4. 有参有返
int test04(int a, int b)
{
int sum = a + b;
return sum;
}
函数的声明
告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。
如果函数在main函数前创建可以省略声明,反之,必须声明函数。
函数的声明可以有多次,但函数的定义只能有一次
示例:
//声明
int Max(int a, int b);
//定义
int Max(int a, int b)
{
return a > b ? a : b;
}
函数的分文件编写
作用:让代码结构更清晰
- 创建后缀为.h的头文件
- 创建后缀为.cpp的源文件
- 在头文件中写函数的声明
- 在源文件中写函数的定义
指针
可以通过指针间接访问内存,进行读写操作
- 内存编号从0开始记录的,一般用十六进制表示
- 可以用指针变量保存地址
指针的定义和使用
语法:数据类型 * 指针变量名;
可以通过解引用的方法来找到指针指向的内存
指针前加 * 代表解引用,找到指针指向的内存中的数据
示例:
int main()
{
//定义指针
int a = 10;
//语法:数据类型 * 指针变量名;
int* p;
//让指针记录变量a地址
p = &a;
// & 取地址符
//打印变量a的首地址
cout << &a << endl; //0000006DD25AFB44
//打印指针p的首地址
cout << p << endl; //
//指针的使用
//可以通过解引用的方法来找到指针指向的内存
//指针前加 * 代表解引用,找到指针指向的内存中的数据
*p = 1000;
cout << a << endl; //a = 1000
cout << *p << endl; //*p = 1000
return 0;
}