本系列博文将分享本人跟随黑马C++学习视频所整理的笔记,分享给大家一起学习,希望对大家有所帮助。该系列文章将列出一些比较关键、有用、易忘的知识点。
本文的使用方法:可以将本文作为一个工具书来使用,当编写程序或者阅读程序遇到不熟悉的知识点的时候,可以用 CTRL+F
按键 搜索关键词,查看该知识点。如:当忘记结构体定义方法,需不需要在括号后加分号,就可以 CTRL+F
搜索 “结构体”关键字,即可跳转到所需内容处。相较于使用 C++ Primer 感觉更加快速、便捷,希望对大家有所帮助。
一、C++基础编程
1.1 Visio Studio 创建新项目
- 直接创建空项目,存放在 “C:\C++_Learning\Project_VS” 中
- 创建文件,右击源文件-添加-新建项-main.cpp (F5 - 运行程序)
#include <iostream> // 输入输出流对象,包含 cin/cout 指令的头文件
using namespace std; // 访问命名空间 std (包含C++标准程序库中定义所有标识符)
int main()
{
cout << "hello world" << endl;
system("pause");
return 0;
}
1.2 注释
- 单行注释:
// 我是注释
- 多行注释:
/*
主函数
作为程序的入口,有且仅有几个
*/
1.3 常量
- 定义常量的方法
#define Day 7 // 宏常量
const int month = 12; // const修饰的常量
1.4 关键字
1.5 标识符
1.6 数据类型
1.6.1 整型
short 的取值范围为 -32768~32767,若令short值为32768,则输出的是-32768,即超过上限从下限开始
1.6.2 sizeof 统计数据类型所在内存大小
sizeof(short) = 2; sizeof(int) = 4; sizeof(long) = 4;
1.6.3 实型(浮点型)
- 小数点前面也算有效数字,比如 3.14 含有三个有效数字
- 需要在常量后面加个f,才能表示单精度
float a = 3.14f; // 如果不加f,程序还需要自己将double转为float再赋值a
- C++的 cout 输出小数默认六位有效数字
1.6.4 科学计数法赋值
int a = 3e2; // 表示3×10^2,即300
1.6.5 字符型
char ch = 'a';
cout << ch << endl; // a A
cout << (int)ch << endl; // 97 65
- char 字符型只占用一个字节
- 内存中存储字符对应的 ASCLL 码
1.6.6 转义字符
cout << "hello world\n";
cout << "aa\t" << "hello" << endl; // aa hello aa加上\t 一共占8个位
cout << "aaaa\t" << "hello" << endl; // aaaa hello aaaa加上\t 一共占8个位
1.6.7 字符串型
- C风格字符串
chat str[] = "hello world";
- C++风格字符串
string str2 = "world";
1.6.8 布尔类型
bool flag = true;
- 占1个字节大小
1.6.9 数据的输入
int a = 0;
cout << "请输入a的数据" << endl;
cin >> a;
1.6.10 随机数
#include <ctime>
srand((unsigned int)time(NULL)); // 随机数种子
int num = rand() % 100 + 1; // rand%100 -> 0~99随机数 ; +1 -> 1~100随机数
1.7 程序流程结构
1.7.1 三目运算符
- 表达式1 ? 表达式2 : 表达式3
(a > b ? a : b) = 100; // a 和 b 谁大谁赋值为100
1.7.2 continue
- 在一次循环中,跳过本次循环余下未执行语句,进行下一次循环
1.7.2 goto
cout << "1 " << endl;
goto FLAG:
cout << "2 " << endl;
FLAG:
cout << "3 " << endl;
1.8 数组
1.8.1 一维数组
- 数组名即为数组在内存中的首地址
int arr[5] = { 1, 2, 3, 4, 5 };
cout << sizeof(arr) << endl; // 4 * 5 = 20
cout << arr << endl; // 000000975494F9C8 (地址) 等价 &arr[0]
1.8.2 二维数组
- 数组名即为二维数组首地址
1.9 函数的份文件编写
- 创建 .h 头文件
- 创建 .cpp 源文件
- 在头文件中写函数的声明
- 在源文件中写函数的定义
// swap.h
#pragma once
#include <iostream>
using namespace std;
void swap(int num1, int num2);
// swap.cpp
#include "swap.h"
void swap(int num1, int num2)
{
int temp;
temp = num1;
num1 = num2;
num2 = temp;
}
1.10 指针
- 存放变量的地址
1.10.1 指针的定义
指针的类型需要与变量的类型一致
int a = 10;
int* p = &a; // & 为取地址符
cout << *p << endl; // 10
int* p1 = NULL; // 空指针,指向内存占编号为0的空间
cout << sizeof(p) << endl; // 8/4
- 64位操作系统(VS上面的Debug选择x64)指针占8字节
- 32为操作系统(VS上面的Debug选择x86)指针占4字节
1.10.2 const修饰的指针
const int* p = &a; // 常量指针,值不可以改
int* const p = &a; // 指针常量,指针指向不可以改
const int* const p = &a; // 既修饰指针,又修饰常量,都不可以改
1.10.2 指针地址传递变量
void new_Swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
new_Swap(&a, &b); // a 与 b 的值发生交换
1.10.3 指针地址传递数组
void sort(int* array, int len); // 两种方法都可以
void sort(int array[], int len); // 两种方法都可以
1.11 结构体
1.11.1 结构体定义
struct Student
{
string name;
int age;
}stu3; // 结构体变量创建方式3
struct Student s1; // 结构体变量创建方式1(struct可以省略)
s1.name = "张三";
s1.age = 12;
Student s2 = {"李四", 18}; // 结构体变量创建方式2
1.11.2 结构体数组
Student stu[2] = {{"王五", 15}, {"王六", 16}};
1.11.3 结构体指针
Student* p = &stu;
cout << p->name << '\t' << p->age << endl;
1.11.4 结构体嵌套
struct Teacher
{
string name;
int id;
Student stu;
};
Teacher t1 = { "王老师", 123, {"张三", 16}};
1.11.5 结构体作为函数参数
- 值传递
void printStu(Student stu) { ... }
printStu(s1);
- 地址传递
void printStu1(const Student* stu) { ... }
printStu1(&s1);
值传递函数传递的是值,会拷贝结构体中的所有数据,占用内存空间多,节省内存空间的方法即:使用地址传递。此时函数传递的是地址,是一个指针,占用字节少,且不会复制一个新的副本出来。
地址传递时,在指针形参前加上 const ,可以防止误操作修改了实参的值。
至此,C++基础语法入门文章已更新完毕,下篇将更新 C++ 核心编程语法。