cpp基础

Posted by LemonWhale on May 8, 2024

1、常量

  1. #difine 定义宏常量
  2. 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 实型(浮点型)
  • 语法:
    1. 单精度 float
      4字节,7位有效数字
      float f1 = 3.14f; // float必须加上f
    2. 双精度 double
      8字节,15~16位有效数字
      double d1 = 3.14;
  • 用于表示小数
  • c++打印默认是打印6位有效数字
  • 科学计数法 float f2 = 3e2; // 3×10^2
    float f2 = 3e-2; // 3×0.1^2
    4.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 函数的默认参数
  • 语法:返回值类型 函数名(形参 = 默认值){ 函数体 }
  • 优先选择传入数据
    注意事项
    1. 如果某个位置已经有了默认参数,从这个位置往后都必须要有默认值;
    2. 如果函数声明有默认参数,函数实现就不能有默认参数
      6.2 函数的占位参数
  • 语法:返回值类型 函数名(数据类型){}
  • 有数据类型但是没有变量名
    // 第二个int的作用就是占位
    // 占位参数也可以有默认参数
    void func(int a, int = 10){
      cout << "this is func" << endl;
    }
    
    6.3 函数重载
  • 作用:函数名可以相同,提高复用性
  • 满足条件
    1. 同一个作用域下
    2. 函数名称相同
    3. 函数参数的类型不同或者个数不同或者顺序不同
  • 注意:函数的返回值不可以作为函数重载的条件

  • 注意事项
    1. 引用作为重载的条件
      int &a 传入10是不合法的
      const int &a 合法
    2. 函数重载碰到默认参数
      ```Cpp void fun(int a, int b = 10){ return; }

    void fun(int a){ return; } ``` 出现二义性,报错。