C++入门

入门“HELLO WORLD"编写

在这里插入图片描述

注释

  • 行注释 //
  • 块注释:/* */ (可注释多行 不能嵌套)

数据类型

  • 关键字
    在这里插入图片描述
  • 整型变量(常量和变量)
    1. 常量:
      整型、实型、字符型、字符串

      • 整型常量:
        二进制:0b开头
        十进制:正常数字
        八进制:0开头
        十六进制:0x开头 a=10
        在这里插入图片描述
    2. 变量:变量名代表空间内容
      定义形式: 类型名 变量名;
      命名规则:字母数字下划线组成,不能由数字开头,不可是关键字,区分大小写

变量的初始化

  • 在定义变量时给变量赋值
    全局变量(函数外定义)不初始化内容为0
    局部变量不初始化内容不确定
    变量一般建议初始化为0

整型变量的使用

  • 读(取值)写(赋值)
  • 变量的声明(多文件编译使用):对变量名以及类型提前说明,不会为该变量开辟空间
    先使用后定义(extern 修饰 外部可用)
    在这里插入图片描述
    - 变量的定义:创建变量名,系统为变量开辟空间
    - 变量的声明:对变量的类型和名称事先说明,不会为变量创建空间(全局变量)
    - 变量的使用:对已经存在的变量的读写操作

键盘给变量赋值

  • 使用关键字cin给变量获取输入
int data = 0;
cin>>data;//data获取键盘输入
  • 同时给多个变量获取键盘输入(每个变量的值以空格隔开或回车)
    cin可以自动跳过空格和回车 右箭头
	int data = 0;
    int num = 0;
    cout<<"请输入两个int数据:";
    cin>>num>>data;
    cout<<"num="<<num<<",data="<<data<<endl;
    return 0;

例题:键盘获取输入求最大值

#include <iostream>
using namespace std;
int main()
{
    int num1=0;
    int num2 = 0;
    cout<<"请输入两个int数据:";
    cin>>num1>>num2;
    if(num1 > num2)
    {
        cout<<"最大值为:"<<num1<<endl;
    }
    else
    {
        cout<<"最大值为:"<<num2<<endl;
    }
    return 0;
}

字符类型

在这里插入图片描述

字符常量:

				用单引号括起来(单引号只能作用于一个字符,转义字符除外)
				输出ASCII值的方式:
	cout<<'a'<<endl;
    cout<<(int)'a'<<endl;//输出ASCII值

字符变量

![在这里插入图片描述](https://img-blog.csdnimg.cn/c3e1feac1e2741c691ed6a3c497ef0b4.png)
字符变量的初始化
	char ch = '\0';//'\0'的ASCII就是0
  • ‘\0’ 和’0’、数值0 的区别
    ’ \0’: 字符常量(char)ASCII为0
    数值0:是整型常量(int) 内存的存储值为0
    ‘0’: 字符常量(char)ASCII为48
键盘给字符变量赋值
	 char ch='\0';
    cout<<"请输入一个字符:";
    cin>>ch;
    cout<<"ch="<<ch<<endl;

例题

大小写转换

需求:键盘输入一个字符,小写改成大写,大写改成小写,其他字符不转换
在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{
   char ch='\0';
   cout<<"请输入一个字符:";
   cin>>ch;
   if(ch>='a' && ch<='z')
       ch = ch-('a'-'A');
   else if(ch>='A' && ch<='Z')
       ch = ch+('a'-'A');
   cout<<"ch="<<ch<<endl;
    return 0;
}

字符常量和字符串常量的区别

在这里插入图片描述

实型(浮点数)

在这里插入图片描述

  • 实型常量
    不以f结尾的实型常量为double类型 eg:3.14
    以f结尾的实型常量为float类型 eg:3.14f
    指数形式:123e3(10的三次方)
  • 实型变量
    在这里插入图片描述

有符号数和无符号数

有符号数

数据的二进制最高位为符号位,其它为数据位
最高位1表示负数,0表示正数
-128-- 127

无符号数

没有符号位 所有二进位都是数据位
0 – 255
在这里插入图片描述

进制的转换

进制的概述

在这里插入图片描述

十进制转其他进制在这里插入图片描述

其他进制转十进制

在这里插入图片描述

其他进制转换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原码、反码、补码

在这里插入图片描述
在这里插入图片描述

对数据的存

在这里插入图片描述

对数据的取

在这里插入图片描述

其他关键字

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

转义字符

在这里插入图片描述

类型转换

  • 转换的方法有两种:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

运算符

在这里插入图片描述

算术运算符

在这里插入图片描述

  • 例题在这里插入图片描述
#include <iostream>
using namespace std;
int main()
{
    int data = 0;
    cout<<"请输入一个int数据:";
    cin>>data;
    if(data%3 == 0)
    {
        cout<<data<<"能被三整除"<<endl;
    }
    else
    {
        cout<<data<<"不能被三整除"<<endl;
    }
    return 0;
}

在这里插入图片描述

复合运算符

在这里插入图片描述

关系运算符

在这里插入图片描述

逻辑运算符在这里插入图片描述

产生随机数

#include <iostream>
#include <time.h>  //time函数的头文件
using namespace std;
int main()
{
    //设置随机数种子   time(NULL)获取当前时间
    srand(time(NULL));

    //产生随机数据的函数rand()
    cout<<rand()<<endl;
    return 0;
}

位运算(二进制位运算)在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三目运算符

在这里插入图片描述

    int data1 = 10;
    int data2 = 20;
    //(data1>data2?data1:data2)结果等价于data2
    (data1>data2?data1:data2) = 200;
    cout<<"data1="<<data1<<endl; //10
    cout<<"data2="<<data2<<endl;  //200

运算符优先级

在这里插入图片描述
在这里插入图片描述

自增自减运算符

在这里插入图片描述

控制语句(选择控制、循环控制)

选择控制语句if

if语句的形式

在这里插入图片描述

  • 例题: 判断data能被3整除
    int data = 12;
    if(data%3 == 0)
    {
        cout<<data<<"能被3整除"<<endl;
    }

if…else…语句

在这里插入图片描述

  • 键盘输入一个int数据求它对2的余数
    int data = 0;
    cin>>data;
    if(data%2 == 0)
    {
        cout<<data<<"对2的余数为0"<<endl;
    }
    else
    {
        cout<<data<<"对2的余数为1"<<endl;
    }

if…else if… else语句

在这里插入图片描述

选择控制语句switch

在这里插入图片描述

  • 例题:键盘输入1~7的数值 判断是星期几
    int data = 0;
    cout<<"请输入1~7的数值:";
    cin>>data;
    if(data<1 || data>7)
    {
        cout<<"输入的是无效数值,请输入1~7的数值"<<endl;
    }
    switch(data)
    {
        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;
    }

循环控制语句for

在这里插入图片描述

  • 例题:for循环求1~100的和
    int i = 0;
    int sum ;
    for(i=1,sum=0;i<=100;i++)
    {
        sum+=i;
    }
    cout<<"sum="<<sum<<endl;

for循环中的break,contiune

在这里插入图片描述

循环嵌套循环

在这里插入图片描述

  • 例题:输出九九乘法表
int i = 0;
    int j = 0;
    for(i=1;i<=9;i++)
    {
        for(j=1;j<=i;j++)
        {
            cout<<j<<'*'<<i<<'='<<j*i<<" ";
        }
        cout<<endl;
    }

循环控制语句while

在这里插入图片描述

  • 例题:while求1~100的和
    int i = 0;
    int sum = 0;
    while(i<=100)
    {
        sum+=i;
        i++;
    }
    cout<<sum<<endl;

while中的break,continue

在这里插入图片描述

数组

一维数值数组

在这里插入图片描述

一维数值数组的定义

在这里插入图片描述
在这里插入图片描述

	int arr[5];
    int n = sizeof(arr)/sizeof(arr[0]);
    int i = 0;
    for(i=0;i<n;i++)
    {
        cout<<arr[i]<<" ";//未初始化的局部数组元素内部不确定
    }
    cout<<endl;

一维数值数组的初始化

在这里插入图片描述

一维数值数组的元素操作

在这里插入图片描述
在这里插入图片描述

	int arr[5]={0};
    int n = sizeof(arr)/sizeof(arr[0]);
    cout<<"请输入"<<n<<"个int数值:";
    int i = 0;
    for(i=0;i<n;i++)
    {
        cin>>arr[i];
    }
    for(i=0;i<n;i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
  • 例题:键盘输入10个数,求这10个数的最大值和最小值
   int arr[10]={0};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"请输入"<<n<<"个int数值:";
   int i = 0;
   for(i=0;i<n;i++)
   {
       cin>>arr[i];
   }
   int min=arr[0],max=arr[0];
   for(i=1;i<n;i++)
   {
       max = max>arr[i]?max:arr[i];
       min = min<arr[i]?min:arr[i];
   }
   cout<<"min="<<min<<" max="<<max<<endl;

二维数值数组

在这里插入图片描述

二维数值数组的初始化

在这里插入图片描述

二维数值数组的元素操作

  1. 二维数值数组获取键盘输入
	int arr[3][4]={0};
    int row = sizeof(arr)/sizeof(arr[0]);
    int col = sizeof(arr[0])/sizeof(arr[0][0]);
    int i=0,j=0;
    for(i=0;i<row;i++)
    {
        for(j=0;j<col;j++)
        {
            cin>>arr[i][j];
        }
    }
    for(i=0;i<row;i++)
    {
        for(j=0;j<col;j++)
        {
            cout<<arr[i][j]<<" ";
        }
        cout<<endl;
    }

一维字符数组

一维字符数组的初始化

在这里插入图片描述

字符数组的遍历

在这里插入图片描述

键盘获取字符串

在这里插入图片描述

  • 例题:获取一个字符串,求该字符串的长度
    char str[32]="";
    cout<<"请输入一个字符串:";
    cin.getline(str,sizeof(str));
    int i=0;
    while(str[i] != '\0')
        i++;
    cout<<str<<"的长度:"<<i<<endl;

二维字符数组

在这里插入图片描述

遍历二维字符数组

    char arr[5][128]={"hello","world","hehehe","xixixi","lalala"};
    int row = sizeof(arr)/sizeof(arr[0]);
    int i;
    for(i=0;i<row;i++)
        cout<<arr[i]<<endl;

二维字符数组获取键盘输入(获取多个字符串)

    char arr[5][32]={""};
    int row = sizeof(arr)/sizeof(arr[0]);
    int i;
    for(i=0;i<row;i++)
    {
        cin>>arr[i];
    }
    for(i=0;i<row;i++)
    {
        cout<<arr[i]<<endl;
    }

函数

在这里插入图片描述

函数的定义、声明、调用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

函数的传参

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <iostream>

using namespace std;


int main()
{
    void inputIntArray(int arr[],int n);
    void sortIntArray(int arr[],int n);
    void printIntArray(int arr[],int n);
    int arr[5]={0};
    int n = sizeof(arr)/sizeof(arr[0]);
    //获取键盘输入
    inputIntArray(arr,n);
    //对数组排序
    sortIntArray(arr,n);
    //对数组遍历
    printIntArray(arr,n);


    return 0;

}
void inputIntArray(int arr[],int n)
{
    cout<<"请输入"<<n<<"个int数据:";
    int i = 0;
    for(i=0;i<n;i++)
    {
        cin>>arr[i];
    }
    return;

}
void sortIntArray(int arr[],int n)
{
    int i = 0;
    for(i=0;i<n-1;i++)
    {
        int j = 0;
        for(j=0;j<n-i-1;j++)
        {
            if(arr[j]>arr[j+1])
            {
                int tmp = arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tmp;
            }
        }
    }
    return;
}
void printIntArray(int arr[],int n)
{
    int i = 0;
    for(i=0;i<n;i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
    return;
}

在这里插入图片描述

#include <iostream>

using namespace std;


int main()
{
    void myGetString(char str[],int n);
    int myStrlen(char str[]);
    char str[128]="";
    //键盘获取字符串
    myGetString(str,sizeof(str));
    //测量字符串的长度
    cout<<"长度:"<<myStrlen(str)<<endl;
    return 0;
}
void myGetString(char str[],int n)
{
    cout<<"请输入一个字符串:";
    cin.getline(str,n);
    return;
}
int myStrlen(char str[])
{
    int i = 0;
    while(str[i] != '\0')
        i++;
    return i;
}

预处理

内存分区

在这里插入图片描述

变量的存储

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全局函数和静态函数

在这里插入图片描述

头文件包含

在这里插入图片描述

#define 宏

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

指针

指针变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 综合案例
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

数组元素的指针

在这里插入图片描述
在这里插入图片描述

	int arr[5]={10,20,30,40,50};
    int *p=arr;
    int n=sizeof(arr)/sizeof(arr[0]);
    //遍历数组
    int i;
    for(i=0;i<n;i++)
    {
        cout<<*(p+i)<<" ";//cout<<arr[i]<<" ";
    }
    cout<<endl;

在这里插入图片描述

  • 例题
    在这里插入图片描述
    在这里插入图片描述

字符串与指针

在这里插入图片描述
在这里插入图片描述

指针数组

在这里插入图片描述
在这里插入图片描述

   int num1 = 10;
    int num2 = 20;
    int num3 = 30;
    int num4 = 40;
    int *arr[4] = {&num1,&num2,&num3,&num4};
    int n = sizeof(arr)/sizeof(arr[0]);
    //遍历
    int i ;
    for(i=0;i<n;i++)
    {
        cout<<*arr[i]<<" ";
    }
    cout<<endl;

在这里插入图片描述

	char *arr[4]={"scd","edee","dedede","edededed"};
    int n = sizeof(arr)/sizeof(arr[0]);
    //遍历
    int i;
    for(i=0;i<n;i++)
    {
        cout<<arr[i]<<endl;
    }

在这里插入图片描述
指针数组只能读,二维字符数组可读可写

指针的指针

在这里插入图片描述

数组指针

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多维数组的物理存储

在这里插入图片描述
在这里插入图片描述

指针与函数

在这里插入图片描述

#include <iostream>

using namespace std;
void setNum01(int data)
{
    data=100;
}
int main()
{
    int num = 0;
    setNum01(num);//单向传递之传值
    cout<<"num = "<<num<<endl;//修改不成功
    return 0;
}

在这里插入图片描述

#include <iostream>

using namespace std;
void setNum02(int *p)
{
    *p=100;
}
int main()
{
    int num = 0;
    setNum02(&num);//单向传递之传地址
    cout<<"num = "<<num<<endl;//100 修改成功
    return 0;
}

在这里插入图片描述

#include <iostream>
using namespace std;
//void ouputInArray(int arr[5],int n)
//一维数组作为函数的参数 会被编译器优化成指针变量
void ouputInArray(int *arr,int n)
{
    cout<<"内部sizeof(arr) = "<<sizeof(arr)<<endl;
    int i = 0;
    for(i=0;i<n;i++)
    {
        //cout<<*(arr+i)<<" ";
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}
int main()
{
    int arr[5]={10,20,30,40,50};
    int n = sizeof(arr)/sizeof(arr[0]);
    cout<<"外部sizeof(arr) = "<<sizeof(arr)<<endl;
    // 遍历数组
    ouputInArray(arr,n);
}

结果:在这里插入图片描述

在这里插入图片描述

#include <iostream>
using namespace std;

void outputIntDoubleArray(int (*arr)[4],int row,int col)
{
    cout<<"内部sizeof(arr) = "<<sizeof(arr)<<endl;
    int i = 0,j = 0;
    for(i=0;i<row;i++)
    {
        for(j=0;j<col;j++)
        {
            cout<<arr[i][j]<<" ";
        }
        cout<<endl;
    }
}
int main()
{
    int arr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    int row = sizeof(arr)/sizeof(arr[0]);
    int col = sizeof(arr[0])/sizeof(arr[0][0]);
    cout<<"外部sizeof(arr) = "<<sizeof(arr)<<endl;
    // 遍历数组
    outputIntDoubleArray(arr,row,col);
}

结果:
在这里插入图片描述
在这里插入图片描述

函数指针

在这里插入图片描述

#include <iostream>
using namespace std;
int myAdd(int x,int y)
{
    return x+y;
}
int main()
{
    int (*p)(int x,int y)=NULL;
    cout<<"sizeof(p) = "<<sizeof(p)<<endl;
    //函数指针和函数入口地址建立关系
    p = myAdd;
    //通过p调用myAdd函数(函数+(实参))
    cout<<p(10,20)<<endl;
}

结果:
在这里插入图片描述
在这里插入图片描述

函数指针变量使用typedef定义

#include <iostream>
using namespace std;
int myAdd(int x,int y)
{
    return x+y;
}
int main()
{
    //int (*p)(int x,int y)=NULL;
    //给函数指针类型取别名
    typedef int(*FUN_TYPE)(int x,int y);
    FUN_TYPE p = myAdd;
    cout<<"sizeof(p) = "<<sizeof(p)<<endl;
    //函数指针和函数入口地址建立关系
    p = NULL;
    //通过p调用myAdd函数(函数+(实参))
    cout<<p(10,20)<<endl;
}

在这里插入图片描述
在这里插入图片描述

动态空间申请

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{
    int *p = NULL;
    p = new int;//从堆区中申请int类型大小的空间
    *p = 100;
    cout<<"*p="<<*p<<endl;
    //释放空间
    delete p;

    //new申请空间的同时 初始化空间内容
    int *p1 = NULL;
    p1 = new int(100);
    cout<<"*p1="<<*p1<<endl;
    delete p1;
    return 0;
}

在这里插入图片描述

	int *arr = NULL;
    arr = new int[5]{10,20,30,40,50};
    int  i = 0;
    for(i=0;i<5;i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
    //如果new的时候有[],那么delete时也需要[]
    delete [] arr;

字符串处理函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结构体

概述

在这里插入图片描述

结构体类型的定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结构体变量的操作

在这里插入图片描述

结构体变量的初始化

在这里插入图片描述

清空整个结构体变量

使用memset清空结构体变量
在这里插入图片描述

#include <iostream>
#include <string.h>
using namespace std;
struct Stu
{
    int num;
    char name[32];
};
int main()
{
    Stu lucy;
    //清空整个结构体变量
    memset(&lucy,0,sizeof(lucy));
    cout<<lucy.num<<" "<<lucy.name<<endl;
    return 0;
}

用键盘给结构体变量中成员赋值

struct Stu
{
    int num;
    char name[32];
};
int main()
{
    Stu lucy;
    //清空整个结构体变量
    memset(&lucy,0,sizeof(lucy));
    cout<<"请输入学号 姓名:";
    cin>>lucy.num>>lucy.name;
    cout<<lucy.num<<" "<<lucy.name<<endl;
    return 0;
}

可以单独操作结构体中成员

单独操作结构体中成员必须遵循结构体自身的类型
在这里插入图片描述

相同类型的结构体变量之间赋值方法

三种方法:

#include <iostream>
#include <string.h>
using namespace std;
struct Stu
{
    int num;
    char name[32];
};
int main()
{
    Stu lucy {100,"lucy"};
    Stu bob;
#if 0
    //第一种方法,逐个成员赋值(遵循成员类型)
    bob.num = lucy.num;
    strcpy(bob.name,lucy.name);
#elif 1
    //第二种方法,相同类型的结构体变量 可以直接赋值(推荐)
    bob = lucy;
#else
    //第三种方式:内存拷贝(是第二种的底层实现)
    memcpy(&bob,&lucy,sizeof(Stu));
#endif
    cout<<bob.num<<" "<<bob.name<<endl;
    return 0;
}

结构体嵌套结构体

在这里插入图片描述
在这里插入图片描述

结构体数组

在这里插入图片描述

结构体数组的定义

#include <iostream>
#include <string.h>
using namespace std;
struct Stu
{
    int num;
    char name[32];
};
int main()
{
    Stu arr[5]={{100,"lucy"},{101,"bob"},{102,"tom"},{103,"得码"},{104,"小跑"}};
    int n = sizeof(arr)/sizeof(arr[0]);
    //清空数组
    //menset(arr,0,sizeof(arr));

    int i;
    for(i=0;i<n;i++)
    {
        //数组的每个元素是结构体变量
        cout<<arr[i].num<<" "<<arr[i].name<<endl;
    }


    return 0;
}

结果:
在这里插入图片描述

键盘给结构体数组赋值

#include <iostream>
#include <string.h>
using namespace std;
struct Stu
{
    int num;
    char name[32];
};
int main()
{
    Stu arr[5];
    memset(arr,0,sizeof(arr));
    int n = sizeof(arr)/sizeof(arr[0]);
    cout<<"请输入"<<n<<"个学员信息(num name)"<<endl;
    int i=0;
    for(i=0;i<n;i++)
    {
        cin>>arr[i].num>>arr[i].name;
    }
    //遍历
    for(i=0;i<n;i++)
    {
        cout<<arr[i].num<<" "<<arr[i].name<<endl;
    }

    return 0;
}

结果:
在这里插入图片描述

结构体指针变量

在这里插入图片描述

指针结构体变量的定义

#include <iostream>
#include <string.h>
using namespace std;
struct Stu
{
    int num;
    char name[32];
};
int main()
{
    Stu lucy={100,"lucy"};
    Stu *p = &lucy;
    //*p == lucy
    cout<<lucy.num<<" "<<lucy.name<<endl;
    cout<<(*p).num<<" "<<(*p).name<<endl;
    //通过指针变量 使用->访问成员
    cout<<p->num<<" "<<p->name<<endl;
    //如果是地址可以直接使用->访问成员  如果是结构体变量 需要.访问成员
    cout<<(&lucy)->num<<" "<<(&lucy)->name<<endl;
    return 0;
}

结构体数组元素的指针变量

指针变量保存结构体数组元素的地址

#include <iostream>
#include <string.h>
using namespace std;
struct Stu
{
    int num;
    char name[32];
};
void inputStuArray(Stu *arr,int n)
{
    cout<<"请输入"<<n<<"个学生信息(num,name)"<<endl;
    int i = 0;
    for(i=0;i<n;i++)
    {
        cin>>(arr+i)->num>>(arr+i)->name;
    }
}
void sortStuArray(Stu *arr,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        int j;
        for(j=0;j<n-i-1;j++)
        {
            if((arr+j)->num > (arr+j+1)->num)  //arr[j].num
            {
                Stu tmp = *(arr+j);//arr[j]
                *(arr+j) = *(arr+j+1);
                *(arr+j+1) = tmp;
            }
        }
    }
}
void outputStuArray(Stu *arr,int n)
{
    int i = 0;
    for(i=0;i<n;i++)
    {
        cout<<arr[i].num<<" "<<(arr+i)->name<<endl;
    }
}
int main()
{
    Stu arr[5];
    memset(arr,0,sizeof(arr));
    int n = sizeof(arr)/sizeof(arr[0]);
    //封装函数获取键盘输入
    inputStuArray(arr,n);
    //对结构体数组按学号排序
    sortStuArray(arr,n);
    //输出结构体数组元素的内容
    outputStuArray(arr,n);
    return 0;
}

结果:
在这里插入图片描述

结构体的指针成员

结构体的指针成员定义

在这里插入图片描述

在这里插入图片描述

结构体指针成员指向

在这里插入图片描述

结构体的浅拷贝

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结构体的深拷贝

在这里插入图片描述

#include <iostream>
#include <string.h>
using namespace std;

struct Stu
{
    int num;
    char *name;
};
int main()
{
    Stu lucy;
    lucy.num = 100;
    lucy.name = new char[32];
    strcpy(lucy.name,"lucy");

    Stu bob;
    bob.num = lucy.num;
    bob.name = new char[32];
    strcpy(bob.name,lucy.name);
    cout<<bob.num<<" "<<bob.name<<endl;
    delete [] lucy.name;
    delete [] bob.name;
    return 0;
}

结构体变量在堆区 结构体的指针成员也指向堆区

在这里插入图片描述

在这里插入图片描述

结构体的对齐规则

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

结构体的位域

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

共用体union

在这里插入图片描述

  • 案例
    union Data
    {
        char a;
        short b;
        int c;
    };
    Data ob;
    ob.a = 10;
    ob.b = 20;
    ob.c = 30;
    cout<<ob.a+ob.b+ob.c<<endl;   //90

结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

枚举enum

在这里插入图片描述
在这里插入图片描述

链表

链表的概述

在这里插入图片描述

在这里插入图片描述

静态链表

设计链表节点

在这里插入图片描述
在这里插入图片描述

学生管理系统(动态链表)

C++对C的扩展

面向对象编程概述

在这里插入图片描述
在这里插入图片描述

::作用域运算符

在这里插入图片描述

命名空间namespace

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

using声明 命名空间的成员 可用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

struct类型增强

在这里插入图片描述
在这里插入图片描述

引用

在这里插入图片描述

普通变量的引用

    int a = 10;
    //需求: 给变量a取个别名叫b
    //定义的时候 &修饰变量为引用 b就是a的别名(引用)
    //系统不会为引用开辟空间
    int &b = a;//引用必须初始化

    //a和b代表同一空间内容
    cout<<"a = "<<a<<endl;
    cout<<"b = "<<b<<endl;
    cout<<"&a = "<<&a<<endl;
    cout<<"&b = "<<&b<<endl;

    //操作b等价操作a
    b = 100;
    cout<<"a = "<<a<<endl;
    cout<<"b = "<<b<<endl;

运行结果:
在这里插入图片描述

数组的引用

在这里插入图片描述

指针变量的引用

在这里插入图片描述

函数的引用

在这里插入图片描述

引用作为函数的参数

在这里插入图片描述
在这里插入图片描述

引用作为函数的返回值类型

在这里插入图片描述
在这里插入图片描述

常引用

在这里插入图片描述

内联函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

函数重载

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

函数的默认参数

在这里插入图片描述
在这里插入图片描述

占位参数

在这里插入图片描述

extern"C"浅析

在这里插入图片描述
在这里插入图片描述

类和对象

类和对象的基本概念

在这里插入图片描述

定义一个类

在这里插入图片描述
在这里插入图片描述

设计一个Person类

在这里插入图片描述

#include <iostream>
#include <string.h>
using namespace std;
class Person
{
private:
    char mName[32];
    int mAge;
public:
    //初始化函数
    void personInit(char *name, int age)
    {
        strcpy(mName,name);
        if(age>0 && age<=100)
        mAge = age;
        else cout<<"输入的年龄:"<<age<<"不合法"<<endl;
    }
    //设置mAge
    void setAge(int age)
    {
        if(age>0 && age<=100)
            mAge = age;
        else cout<<"输入的年龄:"<<age<<"不合法"<<endl;
    }
    //得到mAge
    int getAge(void)
    {
        return mAge;
    }
    //设置mName
    void setName(char *name)
    {
        strcpy(mName,name);
    }
    //得到mName
    char *getName(void)
    {
        return mName;
    }
    //显示年龄和姓名
    void showPerson()
    {
        cout<<"性命:"<<mName<<",年龄:"<<mAge<<endl;
    }
};

在这里插入图片描述

设计一个立方体类

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

成员函数在类外实现

在这里插入图片描述

构造函数

初始化和清理

在这里插入图片描述

构造函数的概述

在这里插入图片描述

构造函数的定义方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

提供构造函数的影响

在这里插入图片描述

析构函数

析构函数的定义方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拷贝构造函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

初始化列表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

explicit关键字

在这里插入图片描述

类的对象数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

动态对象创建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

静态成员

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

C++面向对象模型

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值