c++基础版
- Windows环境搭建
- 第一个C++程序
- c++程序运行原理
- 注释
- 常亮
- 字面常亮
- 符号常亮
- 变量
- 数据类型
- 整型
- 实型
- 常量类型确定
- char类型
- 字符串
- 布尔类型
- 控制台输入
- 随机数产生
- 枚举定义
- 数组
- 数组便利
- 指针基础
- 野指针
- 空指针
- 指针运算
- 动态内存分配
- 结构体
- 结构体默认值
- 结构体数组
- 结构体指针
- 结构体指针数组
- 函数
- 无返回值函数和void类型
- 地址传递
- 函数传递数组
- 引用
- 函数引用传参
- 返回指针的正确写法
- 函数返回数组
Windows环境搭建
傻瓜式安装,点击零基础安装CLion
第一个C++程序
#include <iostream>
int main(int argc, char *argv[]) {
std::cout << "Hello World!" << std::endl;
return 0;
}
c++程序运行原理
代码->编译->程序
编译:将c++代码的文本,编译为计算机的可执行程序(.exe)
进行翻译的动作,需要一个工具,称之为:编译器
可执行C++代码编译工作的编译器有很多,课程选择:mingw
安装 mingw
path环境变量配置
cpp文件手动编译运行
g++ c1.cpp -o hello.exe
注释
单行注释
以//开头
多行注释
/**
* 这是main函数
* @return
*/
int main() {
cout<<"C++ Programming"<<"is Best language"<<endl;
return 0;
}
常亮
在程序执行过程中值不会改变的量
字面常亮
被写到代码内的常量,又称为字面量
int main() {
10;
"HELLOWORLD";
'A';
return 0;
}
符号常亮
使用标识符去定义的常量
宏命令:#define 标识符 常量值
#include <iostream>
using namespace std;
#define FAT_BMI 28
#define J2C_RATE 4.19
/**
* 这是main函数
* @return
*/
int main() {
cout << FAT_BMI << endl;
cout << "焦耳转卡路里"<< " " << J2C_RATE << endl;
return 0;
}
中文乱码问题
方案1:引入windows.h
#include <iostream>
#include <windows.h>
using namespace std;
#define FAT_BMI 28
#define J2C_RATE 4.19
/**
* 这是main函数
* @return
*/
int main() {
// 设置UTF8编码
SetConsoleOutputCP(CP_UTF8);
cout << "BMI " << FAT_BMI << endl;
cout << "焦耳转卡路里" << " " << J2C_RATE << endl;
return 0;
}
方案2:system(“chcp 65001”);
#include <iostream>
using namespace std;
#define FAT_BMI 28
#define J2C_RATE 4.19
/**
* 这是main函数
* @return
*/
int main() {
// 只需要加入一句
system("chcp 65001");
cout << "BMI " << FAT_BMI << endl;
cout << "焦耳转卡路里" << " " << J2C_RATE << endl;
return 0;
}
变量
变量的声明和赋值
声明:int num;
赋值:num = 10;
#include <iostream>
using namespace std;
/**
* 这是main函数
* @return
*/
int main() {
// 只需要加入一句
system("chcp 65001");
string name = "小明";
int age = 21;
float height = 180;
char sex = 'm';
cout << name<< "今年"
<< age << "岁,"
<< height << "身高,"
<< sex << "性别,"
<< endl;
return 0;
}
快速声明赋值 int a = 1,b = 2,c = 3;
数据类型
整型
数据类型 | 占用空间 |
---|---|
short | 2字节 |
int | 4字节 |
long | Windows为4字节,Linux为4字节(32位),8字节(64位) |
long long | 8字节 |
#include <iostream>
using namespace std;
/**
* 这是main函数
* @return
*/
int main() {
system("chcp 65001");
short n1 = 2;
int n2 = 3;
long n3 = 4;
long long n4 = 5;
cout << "short 字节 "<< sizeof(n1) << endl;
cout << "int 字节 "<< sizeof(n2) << endl;
cout << "long 字节 "<< sizeof(n3) << endl;
cout << "long long 字节 "<< sizeof(n4) << endl;
return 0;
}
默认是有符号的 signed,无符号添加 unsigned
实型
数据类型 | 占用空间 |
---|---|
flat | 2字节 |
double | 8字节 |
long double | 16字节 |
全部都是有符号的
常量类型确定
char类型
字符串
字符串拼接
使用+,+只用于连接字符串类型
#include <iostream>
using namespace std;
/**
* 这是main函数
* @return
*/
int main() {
system("chcp 65001");
string major = "物理";
int clazz = 1;
string name = "小黑";
cout << "我叫做" << name << " ,来自于" << major << to_string(clazz) << "班" << endl;
return 0;
}
布尔类型
bool : true(等价于1),false(等价于0)
控制台输入
#include <iostream>
using namespace std;
int main() {
system("chcp 65001");
string name;
cout << "Enter your name: ";
cin >> name;
cout << "name : " << name << endl;
return 0;
}
此方式的中文输入和输出都会正常
随机数产生
#include <iostream>
#include <random>
using namespace std;
/**
* 生成随机数
* @param min
* @param max
* @return
*/
int getRandomNumber(int min, int max) {
// 创建一个随机数生成器
random_device rd;
mt19937 gen(rd());
// 定义一个均匀分布的整数范围
uniform_int_distribution<> dis(min, max);
// 生成一个随机数并输出
int random_num = dis(gen);
return random_num;
}
int main() {
int num = getRandomNumber(1,10);
cout << num << endl;
return 0;
}
枚举定义
enum Season {
SPRING,
SUMMER,
AUTUMN,
WINTER
};
数组
由一批相同类型的元素组成的集合
定义 数据类型 数组名[数组长度]
特点:
- 越界不会报错
- 内存连续且有序
数组便利
指针基础
特定类型数据在内存中的存储地址
64位操作系统,指针占用8个字节
野指针
被声明但未初始化(赋值)的指针
空指针
为了避免野指针,将指针赋值为空
int *p = NULL
int *p = nullptr
- NULL是C++内置的宏,表示空的含义,其本质是0
- nullptr是C++11标准引入的关键字,表示指针为空
上述,二选一即可
空指针也不是什么光荣的是,只在需要指针 但需要延迟赋值的场景下作为过度使用,不然声明也没有意义
指针运算
int main() {
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *arr_ptr = &arr[0];
int *arr_ptr1 = &arr[1];
cout << *(++arr_ptr) << endl;
cout << *arr_ptr1 << endl;
return 0;
}
动态内存分配
非new指针是交由c++自动管理的,只有new出来的指针才是自己可以管理(delete)的
只有new 出来的指针才可以 delete
结构体
是一种用户自定义复合数据类型,可以包含不同类型的不同成员
struct Student {
string name;
int age;
string gender;
};
int main() {
Student student = {
"John",
13,
"Marvine"
};
cout << student.name << endl;
return 0;
}
结构体默认值
struct Student {
string name = "hello";
int age = 18;
string gender = "male";
};
int main() {
Student student = {"John"};
cout << student.name << endl;
cout << student.age << endl;
return 0;
}
结构体数组
int main() {
Student s1 = {"h1", 18, "male"};
Student s2 = {"h2", 18, "male"};
Student stus[3] = {s1, s2};
for (auto stu : stus) {
cout << stu.name << endl;
}
return 0;
}
结构体指针
int main() {
Student s1 = {"h1", 18, "male"};
Student *s1_ptr = &s1;
cout << s1.name << endl;
Student *s2 = new Student{"h2", 18, "male"};
cout << s2->name << endl;
delete s2;
return 0;
}
结构体指针数组
函数
一个提前封装好的、可重复使用的、完成特定功能的独立代码单元
#include <iostream>
#include <random>
using namespace std;
/**
* 生成随机数
* @param min
* @param max
* @return
*/
int getRandomNumber(int min, int max) {
// 创建一个随机数生成器
random_device rd;
mt19937 gen(rd());
// 定义一个均匀分布的整数范围
uniform_int_distribution<> dis(min, max);
// 生成一个随机数并输出
int random_num = dis(gen);
return random_num;
}
无返回值函数和void类型
地址传递
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
函数传递数组
引用
某个已存在的变量的别名
函数引用传参
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 1, b = 2;
cout << a << " " << b << endl;
swap(&a, &b);
cout << a << " " << b << endl;
return 0;
}
引用是为了更方便的修改值
返回指针的正确写法
int * add(int a ,int b ) {
int * result = new int;
*result = a + b;
return result;
}
int main() {
int a = 1, b = 2;
int* result = add(a, b);
cout << *result << endl;
delete result;
return 0;
}
函数内如果要返回指针,必须在函数内new空间,并返回指针,然后记得销毁delete