1、常量
#difine
定义宏常量const
修饰的常量
- 常量一旦修改就会报错;
- 宏常量写在函数的外部,const修饰的变量可以定义在函数内部;
2、常用的编程关键字(保留)
关键字不能作为变量名
| int | long | char | float | asm | | — | —- | —- | —– | — |
3、标识符命名规则
- 标识符不能是关键字
- 标识符只能由字母、数字、下划线组成
- 第一个字符必须是字母或者下划线
- 标识符中字母区分大小写
给标识符命名的时候争取做到见名知意的效果,方便自己和他人阅读
#include <iostream>
using namespace std;
int main(){
// 1、标识符不能是关键字
// int int = 10;
// 2、标识符是由字母、数字、下划线组成
int abc = 10;
int _abc = 10;
int _123abc = 10;
//3、标识符第一个字符只能是字母或者是下划线
// int 123abc = 10;
//4、标识符区分大小写
}
4、数据类型
4.1 整型
- c++中必须指定数据类型,否则无法分配内存
- 数据类型存在的意义:给变量分配一个合适的内存空间
| 数据类型 | 占用空间 | 取值范围 | | ————— | ———————————– | ————– | | short(短整型) | 2字节 | (-2^15到2^15-1) | | int(整型) | 4字节 | (-2^31到2^31-1) | | long(长整型) | Windows为4字节,Linux为4字节(32位),8字节(64位) | (-2^31到2^31-1) | | long long(长长整型) | 8字节 | (-2^63到2^63-1) |
4.2 sizeof关键字
- 统计数据类型所占用的内存大小
sizeof(数据类型/变量名)
4.3 实型(浮点型)
- 语法:
- 单精度 float
4字节,7位有效数字
float f1 = 3.14f;
// float必须加上f - 双精度 double
8字节,15~16位有效数字
double d1 = 3.14;
- 单精度 float
- 用于表示小数
- c++打印默认是打印6位有效数字
- 科学计数法
float f2 = 3e2;
// 3×10^2
float f2 = 3e-2;
// 3×0.1^24.4 字符型
- 语法
char ch = 'a';
- c++ 的字符型变量只占用一个字节
- 存储的是ASCII码
| 字符 | ASCII | | — | —– | | a | 97 | | A | 65 |
4.5 转义字符
转义字符 | 作用 |
---|---|
\n | 换行 |
\\ | 反斜杠 |
\t | 水平制表符(占8位) 整齐输出数据 |
4.6 字符串
- C的风格:
char 变量名[] = "字符串值"
- C++风格:
string str2 = "hello world"
需要包含头文件#include <string>
4.7 布尔类型 bool
- 代表真或假的值
- true 真 本质是1
- false 假 本质是0
- 占用一个字节
5、引用
int &a;
5.1 引用做函数参数
- 作用:函数传参时,可以利用引用的技术让形参修饰实参
- 优点:可以简化指针修改实参 ```Cpp void swap(int& a, int& b){ int temp = a; a = b; b = temp; }
int main(){ int a = 10; int b = 20; swap(a, b); }
##### 5.2 引用做函数的返回值
1. 不要返回局部变量的引用
2. 函数的调用可以作为左值
```Cpp
int& test(){
static int a = 10;
return a;
}
int main(){
int &ref = test();
cout << "ref" << ref << endl;
// 打印出来的结果是 10
test() = 1000; // 如果函数的返回值是一个引用,那么这个函数也可以作为左值
cout << "ref" << ref << endl;
// 打印出来的结果是1000
}
5.3 引用的本质
- 本质:引用的本质在cpp内部是一个指针常量 ```Cpp // 发现是引用,转换为 int* const ref = &a; void func(int& ref){ ref = 100; // ref是引用,转换为*ref }
int main(){ int a = 10;
// 发现是引用,转换为 int* const ref = &a;
int& ref = a;
ref = 20; // 内部发现ref是引用,自动帮我们转换为:*ref = 20
func(a);
return 0; } ```
5.4 常量引用
- 通常来修饰形参防止误操作 ```Cpp // 引用使用的场景,通常用来修饰形参 void showVlaue(const int& v){ cout « v « endl; }
int main(){ // 常量存在于全局/静态储存区,变量存在于栈区 // int& ref = 10; 引用本身需要一个合法的内存空间,此行错误 // 加入const就可以了,编译器自动优化代码 // int temp = 10; // const int& ref = temp; const int& ref = 10;
//ref = 100; 加入const后不可以修改变量
cout << ref <<endl;
// 函数中利用常量引用防止误操作修改实参
int a = 10;
showValue(a);
system("pause");
return 0; } ```
6、函数的提高
6.1 函数的默认参数
- 语法:返回值类型 函数名(形参 = 默认值){ 函数体 }
- 优先选择传入数据
注意事项:- 如果某个位置已经有了默认参数,从这个位置往后都必须要有默认值;
- 如果函数声明有默认参数,函数实现就不能有默认参数
6.2 函数的占位参数
- 语法:返回值类型 函数名(数据类型){}
- 有数据类型但是没有变量名
// 第二个int的作用就是占位 // 占位参数也可以有默认参数 void func(int a, int = 10){ cout << "this is func" << endl; }
6.3 函数重载
- 作用:函数名可以相同,提高复用性
- 满足条件
- 同一个作用域下
- 函数名称相同
- 函数参数的类型不同或者个数不同或者顺序不同
-
注意:函数的返回值不可以作为函数重载的条件
- 注意事项
- 引用作为重载的条件
int &a
传入10是不合法的
const int &a
合法 - 函数重载碰到默认参数
```Cpp void fun(int a, int b = 10){ return; }
void fun(int a){ return; } ``` 出现二义性,报错。
- 引用作为重载的条件