【202004】C++学习笔记之基础(自用)


1.数据类型

数据类型存在的意义:给变量分配合适的内存空间

1-1数据类型


2.sizeof关键字

作用:统计数据类型所占内存大小
语法:sizeof(数据类型/变量)


3.整型

2-1整型

:INT_MAX (231−1) // INT_MIN(−231)
:代码里3e2 = 3 * 10^2 // 2e-2 = 3 * 0.1^2


4.浮点型

//VS会默认3.14为double类型,所以在将3.14赋值给float型的f1是需要多做一次数据类型转换
float f1 = 3.14;
//数字后加f效率会更高
float f1 = 3.14f;

:float和double默认情况下,输出一个小数会显示出6位有效数字


5.字符型

:字符型变量并不是把字符本身放在内存中储存,而是将对应的ASCII码放入存储单元
:ASCII—A:65 // a:97


6.转义字符

‘\n’:换行 ‘\’:输出’\’
‘\t’:水平制表符(有助于在控制台出现对齐效果)(8个空格)
例:

  • 12\t输出12+6个空格。
  • 1234567\t输出1234567+1个空格。
  • 12345678输出12345678+0个空格(前三行对齐,因为数字个数(0,8])。
  • 123456789输出123456789+7个空格。
  • 12345678999输出12345678999+5个空格。(后两行对齐,因为数字个数(8,16])

7.运算

  • 除法运算(/):两个整数的结果一定是整数(不进行四舍五入,而是直接舍弃小数部分),两个浮点型的结果是整数或浮点型。

  • 取模运算(%):即取余数运算。两个浮点型数字不能进行取模运算。
    :除法运算和取模运算的被除数都不能为0

  • 递增(减)运算符:前置先递增(减)后进行表达式运算。后置反之。

  • !:真变假,假变真 // &&:同真为真,其余为假 // ||:同假为假,其余为真

  • 三目运算符:(表达式1?表达式2:表达式3)可以进行赋值。


8.结构

  • 顺序结构
  • 选择结构:if…else // switch
    switch:缺点->判断时只能是整型或字符型,不可以是一个区间。优点->结构清晰,执行效率高。
  • 循环结构:while // do…while // for
    区别:do…while会先执行一次循环语句,再判断条件

9.随机数

int num=rand()%100

系统会随机生成0~99的数字,并赋值给num
num只能接收一个随机数,并不是每次刷新都将一个新的随机数赋值给num)
:要想防止随机数都一样,需要利用当前系统时间生成随机数!

//头文件
#include
//代码
srand((unsigned int)time(NULL));


10.跳转语句

包括break(跳出循环)、continue(不跳出循环)和goto语句(不建议使用)(用于无条件跳转语句)
语法:goto [标记](如果标记存在,会跳转到标记的位置)(标记可以与变量重名)
10-1跳转语句


11.数组

11-1数组
=》可以利用sizeof(arr) / sizeof(arr[0]) 得到数组size


12.函数的分文件编写

  • (现在)1.swap.h
    12-1
    2.swap.cpp
    12-2
    3.main.cpp
    12-3
  • (原本)swap.cpp
    12-4

13.指针

13-2指针
:通过指针保存一个地址,即指针就是地址
:指针通过号解引用的方式间接读取p指向的内容,即p=10。并可以对该块内容重新赋值。

代码部分:
13-2
:空指针和野指针的内存(内容)不可以访问和更改


14.const修饰指针

初始:
int a = 10;
int b = 20;

  • 常量指针
    const int *p = &a;
    :指针的指向可以修改,但指针指向的值不可以修改
    =》*p = 20 (×)
    =》p = &b (√)

  • 指针常量
    int * const p = &a;
    :指针的指向不可以修改,但指针指向的值可以修改
    =》*p = 20 (√)
    =》p = &b (×)

  • const即修饰指针又修饰常量
    const int * const p = &a;
    :指针的指向和指针指向的值都不可以修改
    =》*p = 20 (×)
    =》p = &b (×)


15.传值

  • 值传递(不改变实参)
    15-1
  • 利用指针传值(地址传递,改变实参)
    15-2
  • 利用&传值(引用传递,改变实参)
    15-3

16.结构体

语法:struct 结构体名{ 结构体成员列表 }

例:struct student{ string name; int age; int score; };

(1)三种定义结构体变量方法:

  • 先初始化(struct)student s1;
    再对s1赋值s1.name=“张三”; s1.age=18; s1.score=90;
  • 一句话初始化并赋值(struct)student s2= {“李四”, 19, 80};
  • 在定义结构体同时定义结构体变量struct student{ string name; int age; int score; }s3;
    再在main函数中对s3赋值

(2)定义结构体数组
(struct)student stuarr[3]={{“张三”,18,80},{“李四”,19,90},{“王五”,20,100}};

(3)定义结构体指针
16-1


17.结构体嵌套结构体

例:一个教师对应辅导一位学生
17-1


18.结构体中值传递和地址传递

  • 值传递:不改变实参
    18-1
    :形参开辟一片新的内存空间,将实参的内容复制过来。所以在函数中修改形参的值不会更改实参的值。

  • 地址传递:改变实参
    18-2
    :形参开辟一片新的内存空间,只用于存储指针变量,所以只需要4字节,而且在函数中修改形参的值会更改实参的值。

:将函数中的形参改成指针,可以减少内存空间!而且不会复制一个新的副本出来!


19.switch语句

:case后一句太长可能会报错,debug的办法是把这段代码放在一对{}中。例:
19-1