C++基础入门 --- 【学习指南】

文章目录

  • C++基础入门
      • 1.初识C++
        • [1.1 第一个C++程序](#1.1 第一个C++程序)
        • [1.2 注释](#1.2 注释)
        • [1.3 变量](#1.3 变量)
        • [1.4 常量](#1.4 常量)
        • [1.5 关键字](#1.5 关键字)
        • [1.6 标识符命名规则](#1.6 标识符命名规则)
      • 2.数据类型
        • [2.1 整型](#2.1 整型)
        • [2.2 sizeof关键字](#2.2 sizeof关键字)
        • [2.3 浮点型(实型)](#2.3 浮点型(实型))
        • [2.4 字符型](#2.4 字符型)
        • [2.5 转义字符](#2.5 转义字符)
        • [2.6 字符串型](#2.6 字符串型)
        • [2.7 布尔类型 bool](#2.7 布尔类型 bool)
        • [2.8 数据的输入](#2.8 数据的输入)
      • 3.运算符
        • [3.1 算术运算符](#3.1 算术运算符)
        • [3.2 赋值运算符](#3.2 赋值运算符)
        • [3.3 比较运算符](#3.3 比较运算符)
        • [3.4 逻辑运算符](#3.4 逻辑运算符)
      • 4.程序运行结构
        • [4.1 选择结构](#4.1 选择结构)
          • [4.1.1 if语句](#4.1.1 if语句)
          • [4.1.2 三目运算符](#4.1.2 三目运算符)
          • [4.1.3 switch语句](#4.1.3 switch语句)
        • [4.2 循环结构](#4.2 循环结构)
          • [4.2.1 while循环语句](#4.2.1 while循环语句)
          • [4.2.2 do..while循环语句](#4.2.2 do..while循环语句)
        • [4.2.3 for循环语句](#4.2.3 for循环语句)
        • [4.2.4 嵌套循环](#4.2.4 嵌套循环)
        • [4.3 跳转语句](#4.3 跳转语句)
          • [4.3.1 break语句](#4.3.1 break语句)
          • [4.3.2 continue语句](#4.3.2 continue语句)
          • [4.3.3 goto语句](#4.3.3 goto语句)
      • 5.数组
        • [5.1 一维数组](#5.1 一维数组)
          • [5.1.1 一维数组的定义方式](#5.1.1 一维数组的定义方式)
          • [5.1.2 一维数组数组名](#5.1.2 一维数组数组名)
          • [5.1.3 冒号排序](#5.1.3 冒号排序)
        • [5.2 二维数组](#5.2 二维数组)
          • [5.2.1 二维数组的定义方式](#5.2.1 二维数组的定义方式)
          • [5.2.2 二维数组的数组名](#5.2.2 二维数组的数组名)
      • 6.函数
        • [6.1 函数的定义](#6.1 函数的定义)
        • [6.2 函数的调用](#6.2 函数的调用)
        • [6.3 值传递](#6.3 值传递)
        • [6.4 函数的常见格式](#6.4 函数的常见格式)
        • [6.5 函数声明](#6.5 函数声明)
        • [6.6 函数的分文件编写](#6.6 函数的分文件编写)
      • 7.指针
        • [7.1 指针变量的定义和使用](#7.1 指针变量的定义和使用)
        • [7.2 指针占内存空间大小](#7.2 指针占内存空间大小)
        • [7.3 空指针](#7.3 空指针)
        • [7.4 野指针](#7.4 野指针)
        • [7.5 const修饰指针](#7.5 const修饰指针)
        • [7.6 指针和数组](#7.6 指针和数组)
        • [7.7 指针和函数](#7.7 指针和函数)
      • 8.结构体
        • [8.1 结构体的使用](#8.1 结构体的使用)
        • [8.2 结构体数组](#8.2 结构体数组)
        • [8.3 结构体指针](#8.3 结构体指针)
        • [8.4 结构体嵌套结构体](#8.4 结构体嵌套结构体)
        • [8.5 结构体做函数参数](#8.5 结构体做函数参数)
        • [8.6 const修饰结构体变量](#8.6 const修饰结构体变量)

C++基础入门

1.初识C++

1.1 第一个C++程序
c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    system("pause");
    return 0;
}
1.2 注释

作用:在所编写的代码中添加解释和说明,方便其他程序员阅读代码。

两种格式:

1.单行注释://描述信息//

通常放在一行代码上方,对该行代码进行注释说明。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    //cout << "Hello World!" << endl;
    system("pause");
    return 0;
}

2.多行注释:/* 描述信息*/

通常放在一端代码的上方,对该段代码进行整体注释说明。

c++ 复制代码
#include <iostream>
using namespace std;

/*int main()
{
    cout << "Hello World!" << endl;
    system("pause");
    return 0;
}*/

补充:编译器在编译代码时,会省略掉注释的内容。

1.3 变量

作用:给一段指定的内存空间进行命名,以便进行相应的操作。
语法结构:数据类型 变量名 = 初始值;

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    char ch = 'a';
    int a = 10;
    float f = 3.14f;

    cout << ch << endl;
    cout << a << endl;
    cout << f << endl;

    system("pause");
    return 0;
}
1.4 常量

作用:用于记录程序中不可被修改的数据。

两种方式:

1.#define 宏常量

语法结构:#define 常量名 常量值

2.const 修饰的变量

语法结构:#const 数据类型 常量名 = 常量值;

c++ 复制代码
#include <iostream>
using namespace std;

//宏定义
#define M 10

int main()
{
    //const修饰的变量
    const int a = 10;
    M = 20; //报错
    a = 30; //报错
    system("pause");
    return 0;
}
1.5 关键字

定义:预定义的保留标识符,对编译器有特殊意义。

asm do if return typedef
auto double inline short typeid
bool dynamic_cast int signed typename
break else long sizeof union
case enum mutable static unsigned
catch explicit namespace static_cast using
char export new struct virtual
class extern operator switch viod
const false private template volatile
const_cast float protected this wchar_t
continue for public throw while
default friend register true
delete goto reinterpret_cast try

补充:在定义变量或常量时名称不可与C++的关键字相同,否则会有歧义。

1.6 标识符命名规则
  1. 第一个字符必须是字母(不分大小写)或者下划线(__)。

  2. 标识符只能由字母(不分大小写)、数字、下划线(__)组成。

  3. 标识符中的大小写字母有区别。

  4. 标识符不能是编译系统预定定义的、有特殊用途的关键字同名。

2.数据类型

说明:在创建一个变量或常量时,必须要指定相对应的数据类型,不然无法给变量或常量分配内存。不同的数据类型,开辟的内存空间大小也不同。

数据类型 占用空间 取值范围
char 1个字节 [-128,127]或[0, 255]
unsigned char 1个字节 [0, 255]
signed char 1个字节 [-128,127]
int 4个字节 [-2147483648 ,2147483647]
unsigned int 4个字节 [0 , 4294967295]
signed int 4个字节 [-2147483648 , 2147483647]
short int 2个字节 [-32768 , 32767]
unsigned short int 2个字节 [0 , 65,535]
signed short int 2个字节 [-32768 , 32767]
long int 8个字节 [-9,223,372,036,854,775,808 , 9,223,372,036,854,775,807]
signed long int 8个字节 [-9,223,372,036,854,775,808 , 9,223,372,036,854,775,807]
unsigned long int 8个字节 [0 , 18,446,744,073,709,551,615]
float 4个字节 单精度型占4个字节内存空间,7位有效数字
double 8个字节 双精度型占8 个字节内存空间,15~16位有效数字
long long 16个字节 [ -9,223,372,036,854,775,807 , 9,223,372,036,854,775,807]
long double 16个字节 长双精度型 16 个字节内存空间,18-19位有效数字。
wchar_t 2个字节或4个字节 1 个宽字符
2.1 整型

作用:整型变量表示类型为整型的数据。

数据类型 占用空间 取值范围
short(短整型) 2个字节 [-32768 , 32767]
int(整型) 4个字节 [-2147483648 ,2147483647]
long(长整型) 4字节(32位或8个字节(64位) [-2147483648 ,2147483647]
long long(长长整型) 8个字节 [ -9,223,372,036,854,775,807 , 9,223,372,036,854,775,807]
2.2 sizeof关键字

作用:可以计算数据类型所占内存空间大小。
语法结构:sizeof(数据类型 / 变量)

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int a = 10;
    cout << sizeof(a) << endl;

    cout << sizeof(char) << endl;
    cout << sizeof(short) << endl;
    cout << sizeof(int) << endl;
    cout << sizeof(float) << endl;
    cout << sizeof(double) << endl;
    cout << sizeof(long) << endl;
    cout << sizeof(long long) << endl;
    system("pause");
    return 0;
}
2.3 浮点型(实型)

作用:可表示有小数的数据。

两种类型:

  1. 单精度类型float

  2. 双精度类型double

区别:

数据类型 占用空间 有效数字范围
float 4个字节 7位有效数字
double 8个字节 15~16位有效数字
c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    float f = 3.14f;
    double d = 2.13;

    cout << f << endl;
    cout << d << endl;
    cout << sizeof(f) << endl;
    cout << sizeof(d) << endl;
    system("pause");
    return 0;
}
2.4 字符型

作用:用于显示单个字符。
语法结构:char 变量名 = '初始值';

  • 定义字符型变量时,要使用单引号括起来,不可使用双引号

  • 字符型常量存储时不是把字符本身放入内存存储,而是将对应的ASCII编码存放入存储单元。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    char ch = 'a';
    ch = "b"; //报错
    system("pause");
    return 0;
}

ASCII码表:

大致由两部分组成:

  1. ASCII非打印控制字符:0-31分配给了控制字符,用于控制打印机等一些外围设备。

  2. ASCII打印字符:32-126分配给了可在键盘找到的字符。

ASCII值 控制字符 ASCII值 字符 ASCII值 字符 ASCII值 字符
0 NUT 32 (space) 64 @ 96
1 SOH 33 ! 65 A 97 a
2 STX 34 " 66 B 98 b
3 ETX 35 # 67 C 99 c
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 , 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 ' 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DC1 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 TB 55 7 87 W 119 w
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 Y 121 y
26 SUB 58 : 90 Z 122 z
27 ESC 59 ; 91 [ 123 {
28 FS 60 < 92 / 124
29 GS 61 = 93 ] 125 }
30 RS 62 > 94 ^ 126 '
31 US 63 ? 95 __ 127 DEL
2.5 转义字符

作用:表示不能显示出来的ASCII值。

转义字符 含义 ASCII码值(十进制)
\a 警报 007
\b 退格(BS),将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下一页开头 012
\n 换行(LF),将当前位置移到下一行开头 010
\r 回车(CR),将当前位置移到本行开头 013
\t 水平制表(HT),跳到下一个TAB位置 009
\v 垂直制表(VT) 011
\\ 代表一个反斜线字符"\" 092
' 代表一个单引号字符 039
" 代表一个双引号字符 034
? 代表一个问号 063
\0 数字0 000
\ddd 8进制转义字符,d范围0~7 3位八进制
\xhh 16进制转义字符,h范围A~F 3位十六进制
c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    cout << "\\" << endl;
    cout << "\thello\tworld" << endl;
    cout << "\n" << endl;
    system("pause");
    return 0;
}
2.6 字符串型

作用:用来表示一串字符。

两种形式:

1.C风格

语法结构:char 变量名[] = "字符串值";

2.C++风格

语法结构:string 变量名 = "字符串值";

c++ 复制代码
#include <iostream>
#include <string>
using namespace std;

int main()
{
    char ch1[] = "abcd";
    string ch2 = "efg";
    system("pause");
    return 0;
}

补充:

1.C风格的字符串在变量名后需要加[]。

2.C++风格的字符串,使用时需要引入头文件#include。

2.7 布尔类型 bool

作用:表示真或假的值。占用空间大小一个字节。

bool类型只有两种值:

  1. true -- 真(本质是1)

  2. false -- 假(本质是0)

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    bool n = true;
    cout << n << endl;

    n = false;
    cout << n << endl;

    cout << sizeof(bool) << endl;
    system("pause");
    return 0;
}
2.8 数据的输入

作用:从键盘获取输入数据。
关键字:cin
语法结构:cin >> 变量

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int n = 0;
    cout << "请输入一个整型数据:" << endl;
    cin >> n;
    cout << n << endl;
    system("pause");
    return 0;
}

3.运算符

作用:用于代码的运算。

运算符类型 作用
算术运算符 处理四则运算
赋值运算符 将表达式的值赋值给变量
比较运算符 表达式的比较,并返回一个真值或假值
逻辑运算符 根据表达式的值返回真值或假值
3.1 算术运算符

作用:处理四则运算。

运算符 术语 举例 结果
+ 正号 +1 1
- 负号 -1 1
+ 1+1 2
- 1-1 0
* 2*5 10
/ 10/2 5
% 取模(取余) 10%3 1
++ 前置递增 a=2;b=++a; a=3;b=3;
++ 后置递增 a=2;b=a++; a=3;b=2;
-- 前置递减 a=2;b=--a; a=1;b=1;
-- 后置递减 a=2;b=a--; a=1;b=2;
c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int num1 = 10;
    int num2 = 5;

    cout << num1 + num2 << endl;
    cout << num1 - num2 << endl;
    cout << num1 * num2 << endl;
    cout << num1 / num2 << endl;

    int num3 = 2;
    int num4 = 0;
    cout << cout3 / cout4 << endl; //报错,除数不可为0
    system("pause");
    return 0;
}
3.2 赋值运算符

作用:将表达式的值赋值给变量。

运算符 术语 举例 结果
= 赋值 a=1; a=1;
+= 加等于 a=1;a+=2; a=3;
-= 减等于 a=1;a-=1; a=0;
*= 乘等于 a=1;a*=3; a=3;
/= 除等于 a=10;a/=2; a=5;
%= 模等于 a=10;a%=3; a=1;
c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int a = 10;

    a = 20;
    cout << "a=" << a << endl;

    a += 10;
    cout << "a=" << a << endl;

    a -= 20;
    cout << "a=" << a << endl;

    a /= 2;
    cout << "a=" << a << endl;

    a *= 2;
    cout << "a=" << a << endl;

    a %= 3;
    cout << "a=" << a << endl;
    system("pause");
    return 0;
}
3.3 比较运算符

作用:表达式的比较,并返回一个真值或假值。

运算符 术语 举例 结果
== 相等于 1 == 2 0
!= 不等于 1 != 2 1
< 小于 1 < 2 1
> 大于 1 > 2 0
<= 小于等于 1 <= 2 1
>= 大于等于 1 >= 2 0
c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int a = 1;
    int b = 2;

    cout << (a == b) << endl;
    cout << (a != b) << endl;
    cout << (a < b) << endl;
    cout << (a > b) << endl;
    cout << (a <= b) << endl;
    cout << (a >= b) << endl;

    system("pause");
    return 0;
}
3.4 逻辑运算符

作用:根据表达式的值返回真值或假值。

运算符 术语 举例 结果
!a a为假,结果为真;a为真,结果为假
&& a&&b 全1出1,有0出0(1:真 0:假)
| a|
c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int a = 1;
    int b = 2;

    cout << !a << endl;
    cout << !!a << endl;
    cout << (a && b) << endl;
    cout << (a || b) << endl;
    system("pause");
    return 0;
}

4.程序运行结构

  • 顺序结构:程序按顺序执行,不发生跳转

  • 选择结构:判断条件是否满足,选择性区执行相应的代码

  • 循环结构:判断条件是否满足,循环多次执行某段代码

4.1 选择结构
4.1.1 if语句

作用:执行满足条件的语句。

三种形式

  • 单行格式if语句

  • 多行格式if语句

  • 多条件格式if语句

c++ 复制代码
#include <iostream>
using namespace std;

//单行if语句
int main()
{
    int score = 0;
    cout << "请输入你的成绩:" << endl;
    cin >> score;

    if (score >= 60)
    {
        cout << "及格!" << endl;
    }

    system("pause");
    return 0;
}
c++ 复制代码
//多行if语句
int main()
{
    int score = 0;
    cout << "请输入你的成绩:" << endl;
    cin >> score;

    if (score >= 80)
    {
        cout << "良好!" << endl;
    }
    else if (score >= 60)
    {
        cout << "及格!" << endl;
    }
    else
    {
        cout << "不及格!" << endl;
    }

    system("pause");
    return 0;
}
c++ 复制代码
//多条件if语句
int main()
{
    int score = 0;
    cout << "请输入你的成绩:" << endl;
    cin >> score;

    if (score >= 80)
    {
        if (score >= 90)
            cout << "优秀!" << endl;
        else
            cout << "良好!" << endl;
    }
    else if (score >= 60)
    {
        cout << "及格!" << endl;
    }
    else
    {
        cout << "不及格!" << endl;
    }

    system("pause");
    return 0;
}
4.1.2 三目运算符

作用:通过三目运算实现简单的判断。
语法结构:表达式1 ? 表达式2:表达式3

说明

如果表达式1的值为真,执行表达式2,并返回表达式2执行后的结果。

如果表达式1的值为假,执行表达式3,并返回表达式3执行后的结果。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int a = 10;
    int b = 2;
    int c = 0;

    c = a > b ? a : b;
    cout << c << endl;

    (a > b ? a : b) = 5; //在C++中三目运算符返回的是变量,可以继续进行赋值操作。
    cout << a << endl;
    system("pause");
    return 0;
}
4.1.3 switch语句

作用:执行多条件分支语句

语法结构

c++ 复制代码
switch(表达式)
{
    case 常量表达式1: 语句1;break;
    case 常量表达式2: 语句2;break;      '
    case 常量表达式n: 语句n;break;
    ......
    default: 语句n+1;
}
c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int day = 0;
    cin >> day;

    switch (day)
    {
    case 1:
        cout << "星期一" << endl;
        break;

    case 2:
        cout << "星期二" << endl;
        break;
    case 3:
        cout << "星期三" << endl;
        break;
    case 4:
        cout << "星期四" << endl;
        break;
    case 5:
        cout << "星期五" << endl;
        break;
    case 6:
        cout << "星期六" << endl;
        break;
    case 7:
        cout << "星期天" << endl;
        break;
    default:
        cout << "输入错误!" << endl;
        break;
    }
    system("pause");
    return 0;
}

补充:case中如果没有break,程序将会一直向下执行。

4.2 循环结构
4.2.1 while循环语句

作用:满足条件,执行语句。
语法结构:while(循环条件) {循环语句}

说明:只要循环条件的结果为真,就执行循环语句。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int num = 1;
    while (num <= 10)
    {
        cout << num << endl;
        num++;
    }
    system("pause");
    return 0;
}
4.2.2 do...while循环语句

作用:满足条件,执行语句。
语法结构:do{循环语句} while(循环条件);

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int num = 1;
    do
    {
        cout << num << endl;
        num++;
    } while (num <= 10);
    system("pause");
    return 0;
}

补充:do...while与while的区别就是会先执行一次循环语句,再判断循环条件。

4.2.3 for循环语句

作用:满足条件,执行语句。
语法结构:for(表达式1;表达式2;表达式3){循环体语句;}

表达式1:

表达式1为初始化部分,用来进行循环变量赋值。

表达式2:

表达式2为条件判断部分,用来控制循环条件。

表达式3:

表达式3为调整部分,用来控制循环变量递增或递减。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int i = 0;
    for (i = 1; i <= 10; i++)
    {
        cout << i << endl;
    }
    system("pause");
    return 0;
}
4.2.4 嵌套循环

作用:在循环体中再嵌套一层循环,解决实际问题。

例如:打印一个10 x 10的矩形,就需要用到嵌套循环。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int i = 0;
    int j = 0;
    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 10 ; j++)
        {
            cout << "* ";
        }
        cout << endl;
    }
    system("pause");
    return 0;
}
4.3 跳转语句
4.3.1 break语句

作用:跳出选择结构或循环结构。

常用

  • 在switch条件语句中,终止case跳出switch

  • 在循环语句中,跳出当前循环语句

  • 在嵌套循环中,跳出最近的内存循环语句

c++ 复制代码
//switch条件语句
#include <iostream>
using namespace std;

int main()
{
    int day = 0;
    cin >> day;
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        cout << "工作日" << endl;
        break;
    case 6:
    case 7:
        cout << "休息日" << endl;
        break;
    default:
        cout << "error" << endl;
        break;
    }
    system("pause");
    return 0;
}
c++ 复制代码
//循环语句
#include <iostream>
using namespace std;

int main()
{
    for (int i = 1; i <= 10; i++)
    {
        if (i == 5)
            break;
        cout << i << endl;
    }
    system("pause");
    return 0;
}
c++ 复制代码
//嵌套循环
#include <iostream>
using namespace std;

int main()
{
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            if (j == 5)
                break;
            cout << "* ";
        }
        cout << endl;
    }
    system("pause");
    return 0;
}
4.3.2 continue语句

作用:在循环语句中,跳过本次循环中尚未执行的部分,执行下一次的循环。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    for (int i = 1; i <= 10; i++)
    {
        if (i == 5)
            continue;
        cout << i << endl;
    }
    system("pause");
    return 0;
}
4.3.3 goto语句

作用:如果标记的名称存在,程序执行到goto语句时,将会跳转到标记的位置执行。
语法结构:goto 标记;

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    for (int i = 1; i <= 10; i++)
    {
        if (i == 5)
            goto end;
        cout << i << endl;
    }
end:
    cout << "结束" << endl;
    system("pause");
    return 0;
}

5.数组

定义:数组就是一组存放相同类型的数据元素的集合,由连续的内存位置组成。

5.1 一维数组
5.1.1 一维数组的定义方式

三种方式

  1. 数据类型 数组名[数组长度];

  2. 数据类型 数组名[数组长度] = {值1,值2,...值n};

  3. 数据类型 数组名[] = {值1,值2,...值n};

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int arr1[5];
    int arr2[5] = { 10,20,30,40,50 };
    int arr3[] = { 60,70,80,90,100 };

    //赋值
    arr1[0] = 5;
    arr1[1] = 15;
    arr1[2] = 25;
    arr1[3] = 35;
    arr1[4] = 45;

    //输出
    cout << arr1[0] << endl;
    cout << arr1[1] << endl;
    cout << arr1[2] << endl;
    cout << arr1[3] << endl;
    cout << arr1[4] << endl;

    //输出 
    for (int i = 0; i < 5; i++)
    {
        cout << arr2[i] << endl;
    }

    system("pause");
    return 0;
}
5.1.2 一维数组数组名

作用:统计整个数组在内存中的长度,获取数组在内存中的首地址。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

    cout << "数组在内存中的大小为:" << sizeof(arr) << endl;
    cout << "数组中每个元素在内存所占空间大小为:" << sizeof(arr[0]) << endl;
    cout << "数组的元素个数为:" << sizeof(arr) / sizeof arr[0] << endl;

    cout << "数组首元素地址为:" << arr << endl;
    cout << "数组第一个元素地址为:" << &arr[0] << endl;
    cout << "数组第二个元素地址为:" << &arr[1] << endl;

    arr = 10; //报错,数组名是常量不可进行赋值。
    system("pause");
    return 0;
}
5.1.3 冒号排序

作用:对数组内元素进行排序。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int arr[] = { 3,5,8,2,7,9,6,4 };
    int len = sizeof(arr) / sizeof(arr[0]);
    for (int i = 0; i < len - 1; i++)
    {
        for (int j = 0; j < len - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }

    for (int i = 0; i < len; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
    system("pause");
    return 0;
}
5.2 二维数组

定义:就是一个有行和列的矩阵,每一行代表一个数组。

5.2.1 二维数组的定义方式

4种方式

  1. 数据类型 数组名 [行数][列数];

  2. 数据类型 数组名 [行数][列数] = { {值1, 值2}, {值3, 值4}};

  3. 数据类型 数组名 [行数][列数] = { 值1, 值2, 值3, 值4};

  4. 数据类型 数组名 [ ][列数] = { 值1, 值2, 值3, 值4};

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int arr1[3][3];
    int arr2[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
    int arr3[3][3] = { 10,11,12,13,14,15,16,17,18 };
    int arr4[][3] = { 19,20,21,22,23,24,25,26,27 };

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            cout << arr2[i][j] << " ";
        }
        cout << endl;
    }
    system("pause");
    return 0;
}
5.2.2 二维数组的数组名

作用:查看二维数组所占内存空间大小,获取二维数组首地址。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };

    cout << "数组在内存中的大小为:" << sizeof(arr) << endl;
    cout << "数组中每个元素在内存所占空间大小为:" << sizeof(arr[0][0]) << endl;
    cout << "数组的元素个数为:" << sizeof(arr) / sizeof arr[0][0] << endl;

    cout << "数组首元素地址为:" << arr << endl;
    cout << "数组第一个元素地址为:" << &arr[0][0] << endl;
    cout << "数组第二个元素地址为:" << &arr[0][1] << endl;

    system("pause");
    return 0;
}

6.函数

作用:将一段经常使用的代码封装起来,减少重复的代码。

6.1 函数的定义

语法结构:

c++ 复制代码
返回值类型 函数名(参数列表)
{
    函数体语句

    return表达式
}
c++ 复制代码
#include <iostream>
using namespace std;

int add(int num1, int num2)
{
    return num1 + num2;
}

int main()
{
    int num1 = 10;
    int num2 = 20;
    int ret = add(num1, num2);
    cout << ret << endl;
    system("pause");
    return 0;
}
6.2 函数的调用

作用:使用定义好的函数。
语法结构:函数名(参数)

c++ 复制代码
#include <iostream>
using namespace std;

int Sub(int num1, int num2)   //这边的num1,num2为形参
{
    return num1 - num2;
}

int main()
{
    int n1 = 10;
    int n2 = 20;
    //调用Sub函数
    int ret = Sub(n1, n2); //这边的n1,n2为实参
    cout << ret << endl;
    system("pause");
    return 0;
}
6.3 值传递

作用:函数调用时将数值传入形参。

c++ 复制代码
#include <iostream>
using namespace std;

void swap(int num1, int num2)
{
    int temp = num1;
    num1 = num2;
    num2 = temp;
    cout << num1 << endl;
    cout << num2 << endl;
}
int main()
{
    int x = 10;
    int y = 20;
    swap(x, y);
    cout << x << endl;
    cout << y << endl;
    system("pause");
    return 0;
}

补充:形参发生,不会影响实参。

6.4 函数的常见格式

常见的函数格式有4种:

  • 无参无返

  • 有参无返

  • 无参有返

  • 有参有返

c++ 复制代码
#include <iostream>
using namespace std;

//无参无返
void test()
{
    cout << "hello world" << endl;
}

//有参无返
void test2(int a)
{
    cout << "this is test" << endl;
}

//无参有返
int test3()
{
    return 1;
}

//有参有返
int test4(int a)
{
    a += 2;
    return a;
}
6.5 函数声明

作用:告诉便编译器函数名称以及如何调用函数。

c++ 复制代码
#include <iostream>
using namespace std;

//声明
int max(int x, int  y);
int max(int x, int  y);
int max(int x, int  y);

//定义
int max(int x, int  y)
{
    return x > y ? x : y;
}
int main()
{
    int a = 10;
    int b = 20; 
    int c = max(a, b);
    cout << c << endl;
    system("pause");
    return 0;
}

补充:函数声明可多次,但定义只可一次。

6.6 函数的分文件编写

作用:让代码结构更清晰。

一般有4个步骤:

  1. 创建后缀名为.h的头文件

  2. 创建后缀名为.cpp的源文件

  3. 头文件写函数的声明

  4. 源文件写函数的定义

c++ 复制代码
//main.cpp
#include "swap.h"

int main()
{
    int a = 10;
    int b = 20;
    swap(a, b);
    system("pause");
    return 0;
}
c++ 复制代码
//swap.h
#include <iostream>
using namespace std;

void swap(int x, int y);
c++ 复制代码
//swap.cpp
#include "swap.h"

void swap(int x, int y)
{
    int temp = x;
    x = y;
    y = temp;

    cout << x << endl;
    cout << y << endl;
}

7.指针

作用:可通过指针间接访问内存。

7.1 指针变量的定义和使用

语法结构: 数据类型 * 变量名;

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int a = 10;
    int* p = &a;
    cout << "a的地址为:" << &a << endl;
    cout << "指针p的地址为:" << p << endl;

    *p = 20;
    cout << "a的值为:" << a << endl;
    cout << "指针p的值为:" << *p << endl;
    system("pause");
    return 0;
}eturn 0;
}
7.2 指针占内存空间大小

大小:在32位操作系统下占4个字节,64位操作系统下占8个字节。

c 复制代码
#include <iostream>
using namespace std;

int main()
{
    int a = 10;
    int* p = &a;
    cout << sizeof(p) << endl;
    cout << sizeof(char*) << endl;
    cout << sizeof(float *) << endl;
    cout << sizeof(double *) << endl;
    //都是4个字节
    system("pause");
    return 0;
}
7.3 空指针

定义:指针变量指向内存编号为0的空间。
作用:初始化指针变量。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int* p = NULL;

    *p = 100;  //报错,内存编号0-255系统占用,不许用户进行访问
    cout << *p << endl;
    system("pause");
    return 0;
}

补充:空指针指向的内存不可访问。

7.4 野指针

定义:指针变量指向非法的内存空间。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int* p = (int*)0x1234;
    cout << *p << endl;
    system("pause");
    return 0;
}
7.5 const修饰指针

三种形式:

  1. 修饰指针 --- 常量指针

  2. 修饰常量 --- 指针常量

  3. 修饰指针与常量

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int a = 10;
    int b = 20;
    //const修饰的是指针,指针所指向的地址的内容不可改,指针指向的地址可以改
    const int* p1 = &a; 
    *p1 = 20;  //报错
    p1 = &b;

    //const修饰的是常量,指针所指向的地址的内容可改,指针指向的地址不可改
    int* const p2 = &a;
    *p2 = 20;  
    p2 = &b;   //报错

    //const修饰的是常量与指针,指针所指向的地址的内容不可改,指针指向的地址不可改
    const int* const p3 = &a;
    *p3 = 20;  //报错
    p3 = &b;   //报错

    system("pause");
    return 0;
}
7.6 指针和数组

作用:用指针访问数组元素。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    int len = sizeof(arr) / sizeof(arr[0]);
    int* p = arr;
    cout << "数组arr的第一个元素为:" << arr[0] << endl;
    cout << "指针p访问的第一个元素为:" << *p << endl;

    for (int i = 0; i < len; i++)
    {
        cout << *(p + i) << endl; //使用指针遍历数组
    }
    system("pause");
    return 0;
}
7.7 指针和函数

作用:指针作为函数参数,可以修改实参的值。

c++ 复制代码
#include <iostream>
using namespace std;

void swap(int* num1, int* num2)
{
    int temp = *num1;
    *num1 = *num2;
    *num2 = temp;
}

int main()
{
    int a = 10;
    int b = 20;
    cout << "before:" << endl;
    cout << a << endl;
    cout << b << endl;
    swap(&a, &b);
    cout << "after:" << endl;
    cout << a << endl;
    cout << b << endl;
    system("pause");
    return 0;
}

8.结构体

定义:一系列有相同类型或不同类型的数据构成的数据集合。

8.1 结构体的使用

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

结构体创建变量的三种方式:

  1. struct 结构体名 变量名

  2. struct 结构体名 变量名 = {成员1, 成员2, ...成员n};

  3. {}变量名;

c++ 复制代码
#include <iostream>
#include <string>
using namespace std;

struct Student
{
    int id;
    string name;
    int age;
}stu1;

int main()
{
    struct Student stu2;
    struct Student stu3 = { 123456,"小明",20 };
    stu2.id = 123457;
    stu2.name = "小红";
    stu2.age = 18;
    cout << "学号:" << stu2.id << " " << "姓名:" << stu2.name << " " << "年龄:" << stu2.age << endl;
    system("pause");
    return 0;
}
8.2 结构体数组

作用:把自定义的结构体放入数组中方便后期维护。
语法结构:struct 结构体名 数组名[元素个数] = { {}, {}...{}};

c++ 复制代码
#include <iostream>
#include <string>
using namespace std;

struct Student
{
    int id;
    string name;
    int age;
};

int main()
{
    struct Student stu[3] = { {123456,"A",18},{123457,"B",20},{123458,"C",19} };
    stu[1].age = 22;
    stu[1].id = 123459;
    stu[1].name = "D";
    for (int i = 0; i < 3; i++)
    {
        cout << "学号:" << stu[i].id << " " << "姓名" << stu[i].name << " " << "年龄:" << stu[i].age << endl;
    }
    system("pause");
    return 0;
}
8.3 结构体指针

作用:通过指针访问结构体中的成员。

c++ 复制代码
#include <iostream>
#include <string>
using namespace std;

struct Student
{
    int id;
    string name;
    int age;
};

int main()
{
    struct Student stu = { 123456,"小明",20 };
    struct Student* p = &stu;
    cout << "学号:" << p->id << " " << "姓名:" << p->name << " " << "年龄:" << p->age << endl;
    system("pause");
    return 0;
}
8.4 结构体嵌套结构体

作用:结构中的成员可以是另一个结构体。

c++ 复制代码
#include <iostream>
#include <string>
using namespace std;

struct Student
{
    int id;
    string name;
    int age;
};

struct Teacher
{
    string name;
    int age;
    struct Student stu;
};
int main()
{
    struct Teacher teacher = { "E",26,{123456,"A",19} };
    struct Teacher* p = &teacher;
    cout << "老师姓名:" << p->name << " " << "老师年龄:" << p->age << endl;
    cout << "学生学号:" << p->stu.id << " " << "学生姓名:" << p->stu.name << " " << "学生年龄:" << p->stu.age << endl;
    system("pause");
    return 0;
}
8.5 结构体做函数参数

作用:把结构体作为参数向函数传入。

两种传递方式:

  1. 值传递

  2. 地址传递

c++ 复制代码
#include <iostream>
#include <string>
using namespace std;

struct Student
{
    int id;
    string name;
    int age;
};

//值传递
void print1(struct Student stu)
{
    cout << "学号:" << stu.id << " " << "姓名" << stu.name << " " << "年龄:" << stu.age << endl;
}

//地址传递
void print2(struct Student* stu)
{
    cout << "学号:" << stu->id << " " << "姓名" << stu->name << " " << "年龄:" << stu->age << endl;
}

int main()
{
    struct Student stu = { 123456,"A",18 };

    print1(stu);
    print2(&stu);

    system("pause");
    return 0;
}
8.6 const修饰结构体变量

作用:防止误操作。

c++ 复制代码
#include <iostream>
#include <string>
using namespace std;

struct Student
{
    int id;
    string name;
    int age;
};

void print(const Student* stu)
{
    stu->age = 50; //报错
    cout << "学号:" << stu->id << " " << "姓名" << stu->name << " " << "年龄:" << stu->age << endl;
}

int main()
{
    struct Student stu = { 123456,"A",18 };
    print(&stu);
    system("pause");
    return 0;
}
相关推荐
knighthood20019 分钟前
解决:ros进行gazebo仿真,rviz没有显示传感器数据
c++·ubuntu·ros
半盏茶香38 分钟前
【C语言】分支和循环详解(下)猜数字游戏
c语言·开发语言·c++·算法·游戏
小堇不是码农44 分钟前
在VScode中配置C_C++环境
c语言·c++·vscode
Jack黄从零学c++1 小时前
C++ 的异常处理详解
c++·经验分享
捕鲸叉6 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer6 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq6 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
青花瓷8 小时前
C++__XCode工程中Debug版本库向Release版本库的切换
c++·xcode
幺零九零零9 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
捕鲸叉9 小时前
MVC(Model-View-Controller)模式概述
开发语言·c++·设计模式