C++ 基本知识、数组、指针

#include <iostream>
using namespace std;
int main()
{
    cout << "hello world!" << endl;
    return 0;
}

————————————————————————————————————

知识点一,用sizeof测量数据类型的长度
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
    cout << sizeof(double) << endl;
    return 0;
}


————————————————————————————————————

知识点二,信息输出cout
//打印Alan的信息
#include <iostream>
#include <windows.h>
#include <cmath>
#include <iomanip>

using namespace std;

int main()
{
    //设定Alan的能力信息
    SetConsoleTitle ("Alan能力信息");   //set console title 设置 控制台 标题
    double attack = 9999;  //伤害=9999
    double attack_growth = 9999;   //伤害成长值
    double attack_distance = 9999;    //攻击距离
    double defence = 9999;   //防御值
    double defence_growth = 9999;    //防御成长值
    
    //打印出上述信息
    cout << "名称:Alan能力信息" << endl;
    cout << "伤害:" << attack << "(+" << attack_growth << ")" << endl;
    cout << "攻击距离" << attack_distance << endl;
    cout << "防御:" << defence << "(+" << defence_growth << ")" << endl;
    return 0;
}

——————————————————————————————————

知识点三,信息输入cin
#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>

using namespace std;

int main()
{
    int num;
    string ch;
    cout << "Please input a number and a word:";
    cin >> num;    //等同于scanf("%d",&num);
    cin >> ch;
    cout << num << "\t" << ch << endl;
    return 0;
}

————————————————————————————————

知识点四,左对齐cout<<left,打印宽度setw(8),设定空格处填充setfill('_')
#include <iostream>
#include <iomanip>

using namespace std;
int main()
{
    double attack1 = 111;
    double attack2 = 222;
    double attack3 = 333;

    cout << left;  //左对齐
    cout << setfill('_'); //加上这一句,空格的地方会用下划线填充,不加的话就是空格填充。单引号中内容可随意更改
    cout << setw(8) << attack1 <<
        setw(8) << attack2 <<
        setw(8) << attack3 << endl;   //setw(8) 宽度为8个字符
    return 0;
}

——————————————————————————————————————

知识点五,判断对错
#include <iostream>
using namespace std;
int main()
{
    bool flag = true;  //bool类型赋值,只有两个值,true或者false
    cout << boolalpha;   //有了这一句,之后判断对错,输出的就是上面定义的true或者false。没有这一句,判断对错时输出的是1或0
    cout << "15>88吗?" << (15 > 88) << endl;
    cout << "16<88吗?" << (16 < 88) << endl;
    return 0;
}

————————————————————————————————————

知识点六,测量数据类型在内存占多少字节  sizeof
cout<<sizeof(12)<<endl;

————————————————————————————————————

知识点七,运算符?:
int num = 5 > 6 ? 10 : 12; //?之前的结果为真,输出10,结果为假,输出12

————————————————————————————————————

知识点八,if else
//判断用户输入的字符是否是合法硬盘盘符
#include <iostream>
using namespace std;
int main()
{
    char pan = '\0';//默认值设置为空字符
    cout << "请输入一个大写字符,我来判断是否合法:" << endl;
    cin >> pan;//输入的字符赋值到pan这个变量中去
    if (pan >= 'A'&&pan <= 'Z')
    {
        cout << "是合法盘符" << endl;
    }
    else
    {
        cout << "非合法盘符" << endl;
    }

}

——————————————————————————————————

知识点九,if else 应用,购物车商品结算
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main()
{
    double LV = 35000.0, Hermes = 11044.5, Chanel = 1535.00, zongji, jiesuan;
    char shangpinming1, shangpinming2, shangpinming3;
    int shuliang1,shuliang2,shuliang3;

    cout << "节日打折,总价>50000就打7折,否则打9折" << endl;
    cout << "下列是商品价格清单" << endl;
    cout << "LV = 35000.0\tHermes = 11044.5\tChanel = 1535.00"<< endl;

    cout << "请选择商品数量" << endl;
    cin >> shuliang1;
    cin >> shuliang2;
    cin >> shuliang3;

    cout << "确认订单" << endl;
    cout <<"LV价格"<< LV <<' '<< "数量" << shuliang1 << '\t'
        <<"Hermes价格"<< Hermes <<' '<< "数量" << shuliang2 << '\t'
        <<"Chanel价格"<< Chanel<<' ' << "数量" << shuliang3 << endl;

    zongji = LV * shuliang1 + Hermes * shuliang2 + Chanel * shuliang3;

    if (zongji > 50000)
    {
        jiesuan = zongji * 0.07;
    }
    else
    {
        jiesuan = zongji * 0.09;
    }
    cout << "原价总计" << zongji << endl;
    cout << "折后金额为" << jiesuan << endl;
}

————————————————————————————————————

知识点十,if else if

————————————————————————————————————

知识点十一,switch case break default
#include <iostream>
using namespace std;
int main()
{
    int choice ;
    cout << "1为战士,2为法师,3为术士,4为医师" << endl;
    cout << "请选择职业" << endl;
    cin >> choice;
    switch (choice)
    {
    case 1: cout << "您选择了战士" << endl; break;
    case 2: cout << "您选择了法师" << endl; break;
    case 3: cout << "您选择了术士" << endl; break;
    case 4: cout << "您选择了医师" << endl; break;
    default:cout << "您选择了退隐山林" << endl;
    }
}

————————————————————————————————————

知识点十二,while循环
//1-100的累加和
#include <iostream>
using namespace std;
int main()
{
    int i = 1, z = 0, n = 1;
    while(i<=100)
    {
        z = z + i;
        i++;
    }
    cout << z << endl;
}

——————————————————————————————————

知识点十三,while 和 if 的综合运用  创建用户名、密码,登录时三次输入错误强制退出
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{
    string password, name, password2, name2;
    int i = 0, n=3;
    cout << "请创建用户名:" << endl;
    cin >> name;
    cout << "请创建密码" << endl;
    cin >> password;
    cout << "已创建新账户\n" << "用户名:" << name << '\t' << "密码:" << password << endl;


    while (i < 3)
    {
        cout << "请重新登陆" << endl;
        cout << "用户名:" << endl;
        cin >> name2;
        cout << "密码:" << endl;
        cin >> password2;
        i++;

        if (name2 != name || password2 != password)
        {
            if (i < 3)
            {
                cout << "用户名或密码不存在,请重新输入\t" << "已尝试次数" << i << endl;
                
            }
            else
            {
                cout << "3次输入错误,系统强制退出!" << endl;
                exit(0);
            }
                
        }
        else
        {
            cout << "登陆成功" << endl;
            exit(0);
        }
    }    
}

——————————————————————————————————————————————

知识点十四,do while
先执行do,再while判断

——————————————————————————————————————————————

知识点十五,for循环
const int N=20;   //const代替C中的宏定义define
for(int i = 0; i < N; i++)
{
    XXXXXXX;
}

//输入六个月的工资,并计算总工资和平均工资
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    double avg = 0, sum = 0, salary;
    int month;
    
    for (month = 1; month <= 6; month++)
    {
        cout << "请输入第" << month << "个月的工资:" << endl;
        cin >> salary;
        sum += salary;
    }
    avg = sum / 6;
    cout << "总工资是" << sum << '\t' << "平均工资是" << avg << endl;

}


——————————————————————————————————————————————

知识点十六,已知1997年7月1日是星期二,打印出1997年7月的月历
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    cout << "1997年7月的月历:" << endl;
    int day = 31, week = 2;
    cout << "一\t二\t三\t四\t五\t六\t日\t" << endl;
    
    //打印\t
    for (int i = 0; i < week - 1; i++)  //自此往下,原理搞不懂就背下来
    {
        cout << '\t';
    }
    //打印日子
    for (int i = 1; i <= day; i++)
    {
        cout << i;
        if ((i + week - 1) % 7==0)
        {
            cout << '\n';
        }
        else
        {
            cout << '\t';
        }
    }
    cout << endl;
}

——————————————————————————————————————————

知识点十七,跳过本次循环,进行下一次循环 continue
循环输入五个玩家的消费,统计消费额低于500的玩家数量

#include <iostream>
using namespace std;
int main()
{
    double money;   //消费额
    int count = 0;   //计数器
    int i = 0;
    for (i = 0; i < 5; i++)
    {
        cout << "请输入当前玩家消费额:";
        cin >> money;
        if (money >= 500)
        {
            continue; //跳过500以上的情况
        }
        else
        {
            count++;
        }
    }
    cout << "消费额低于500的玩家数量为" << count << "人" << endl;
}

————————————————————————————————————————————

知识点十八,用continue求1-100之间
#include <iostream>
using namespace std;
int main()
{
    int i, sum = 0;
    for (i = 0; i <= 100; i++)
    {
        if (i % 2 == 1)
        {
            continue;
        }
        else
        {
            sum += i;
        }
    }
    cout << "偶数和为" << sum << endl;
}

————————————————————————————————————————————

知识点十九,用双循环(嵌套)打印五行五列星星图案
#include <iostream>
using namespace std;
int main()
{
    int i, j;
    for (i = 0; i < 5; i++)  //外层循环控制行(行数,换行)
    {
        
        for (j = 0; j < 5; j++)   //内层循环控制列(列数,列的图形)
        {
            cout << "*"; //这个地方一次只做一件事,要么控制图形,要么控制列数,打印了*号就不能打印endl换行
            
        }
        cout << endl;
    }
    
}

打印用星号组成的直角三角形
#include <iostream>
using namespace std;
int main()
{
    int i, j;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j <= i; j++)
        {
            cout << "*";
        }
        cout << endl;
    }
        
    
}

打印用星号组成的等腰三角形△
#include <iostream>
using namespace std;
int main()
{
    int i, j;
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j <= 2 - i; j++)
        {
            cout << " ";
        }
        for (j = 0; j <= 2 * i; j++)
        {
            cout << "*";
        }
        cout << endl;
    }
}

打印用星号组成的菱形◇
#include <iostream>
using namespace std;
int main()
{
    int i, j;
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j <= 2 - i; j++)
        {
            cout << " ";
        }
        for (j = 0; j <= 2 * i; j++)
        {
            cout << "*";
        }
        cout << endl;
    }
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j <= i; j++)
        {
            cout << " ";
        }
        for (j = 0; j <= 4 - 2 * i; j++)
        {
            cout << "*";
        }
        cout << endl;
    }
}

上方菱形变异体,用ABC组成菱形
#include <iostream>

using namespace std;
int main()
{
    int i, j;
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j <= 2 - i; j++)
        {
            cout << " ";
        }
        for (j = 0; j <= 2 * i; j++)
        {
            cout <<(char)('A' + i);   //(char)是强制类型转换
        }
        cout << endl;
    }
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j <= i; j++)
        {
            cout << " ";
        }
        for (j = 0; j <= 4 - 2 * i; j++)
        {
            cout << (char)('E'+i);
        }
        cout << endl;
    }
}


——————————————————————————————————————————

知识点二十,一维数组动态赋值
//给定数组长度为5
#include <iostream>
using namespace std;
int main()
{
    int num[5];
    int i = 0;
    for (i = 0; i < 5; i++)
    {
        cout << "请输入第" << (i + 1) << "个数组元素:";
        cin >> num[i];        //只做一件事,这里只进行输入
    }
    for (i = 0; i < 5; i++)
    {
        cout << num[i] << endl;      //只做一件事,这里只进行输出
    }
    return 0;
}


#include <iostream>
using namespace std;
int main()
{
    int num[]{ 8,4,2,1,23,344,12 };
    int i;
    int sum = 0;
    int numLen = sizeof(num) / sizeof(int);  //计算数组长度的固定公式,记住它!!但不适用于string型
    for (i = 0; i < numLen; i++)
    {
        cout << num[i] << '\t';    //首先挨个打印出数组中的数据
    }
    cout << endl;
    //进行累加操作
    for (i = 0; i < numLen; i++)
    {
        sum += num[i];   //计算出数据的和
    }
    cout << "累加和为" << sum << '\t' << "平均值为" << sum / numLen << endl;
}


——————————————————————————————————————————————

知识点二十一,数组基本操(套)作(路)

#include <iostream>
using namespace std;
int main()
{
    int num[]{ 8,4,2,1,23,344,12 };
    int i;
    int sum = 0;
    int numLen = sizeof(num) / sizeof(int);  //计算数组长度的固定公式,记住它!!但不适用于string型
    for (i = 0; i < numLen; i++)
    {
        cout << num[i] << '\t';    //首先挨个打印出数组中的数据
    }
    cout << endl;
    //进行累加操作
    for (i = 0; i < numLen; i++)
    {
        sum += num[i];   //计算出数据的和
    }
    cout << "累加和为" << sum << '\t' << "平均值为" << sum / numLen << endl;

▼▼▼↓↓↓重点在这里↓↓↓▼▼▼
    //套路1:给出一组数,求数组中的最大最小值
    //下方开始找最大值
    /*假设第一个元素是最大值*/
    int max = num[0];
    int maxIndex = 0;  //最大值的下标
    for (i = 1; i < numLen; i++)
    {
        if (num[i] > max)
        {
            max = num[i];
            maxIndex = i;  //记录最大值的下标
        }
    }
    cout << "最大值是:" << max << "/" << num[maxIndex] << endl;  //此处max / num[maxIndex]并无特殊意义,只告诉程序猿有两种编写方法,max 或者num[maxIndex]
    cout << "最大值的下标是" << maxIndex << endl;


    //下方开始找最小值
    int min = num[0];
    int minIndex = 0;
    for (i = 1; i < numLen; i++)
    {
        if (num[i] < min)
        {
            min = num[i];
            minIndex = i;
        }
    }
    cout << "最小值是" << min << '/' << num[minIndex] << endl;  
    cout << "最小值的下标是:" << minIndex << endl;

    //套路2:定义一个整形数组,赋值后,求出奇数个数和偶数个数
    int Jcount = 0, Ocount = 0;  //定义 奇数个数变量 和 偶数个数变量
    for (i = 0; i < numLen; i++)
    {
        if (num[i] % 2 == 0)
        {
            Ocount++;
        }
        else
        {
            Jcount++;
        }
    }
    cout << "奇数个数" << Jcount << '\t' << "偶数个数" << Ocount << endl;


        //套路3:查找输入的数字在数组中的下标,没找到则下标为-1
    int searchNum;  //用户要查找的数字
    int searchIndex = -1;  //了用户查找数字的下标。后面=-1只是编程习惯,写成=-999也没问题,甚至定义成=INT_MIN也可以,因为意思是,把searchIndex设定成一个不可能的值
    loop:cout << "请输入要查找的数字:";
    cin >> searchNum;
    //实用循环查找
    for (i = 0; i < numLen; i++)
    {
        
        if (num[i] == searchNum)
        {
            searchIndex = i;
            break;
        }
    }
    if (searchIndex == -1)
    {
        cout << "您所查找的数字不存在,请重新输入" << endl;
        goto loop;
    }
    else
    {
        cout << searchIndex << endl;
    }
}

——————————————————————————————————————

知识点二十二,数组的常用算法 (高等级套路)
/*冒泡法:两相比较,小的放前面*/ 
#include <iostream>
using namespace std;
int main()
{
    int nums[] = { 15,25,90,23,91 };
    int i, j, temp;
    for (i = 0; i < 5 - 1; i++)          //外层循环控制比较轮数
    {
        for (j = 0; j < 4 - i; j++)     //内层循环控制每轮的比较和交换
        {
            if (nums[j] < nums[j + 1])  //如果前面的小于后面的就交换
            {
                temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }

    }
}

/*选择排序:假设第一个是最小值,跟后面的值比较大小*/
#include <iostream>
using namespace std;
int  main()
{
    int num[]{ 8,4,2,1,23,,344,12 };
    int numlen = sizeof(num) / sizeof(int);  //数组长度公式,不能用于字符串数组
    int min = num[0];   //假设第一个元素是最小值
    int minIndex = 0;    //最小值的初始下标设置为0
    int temp;
    for (int i = 0; i < numlen - 1; i++)
    {
        min = num[i];
        minIndex = i;
        for (int j = i + 1; j < numlen - 1; j++)
        {
            if (num[j] < min)
            {
                min = num[j];
                minIndex = j;
            }
        }
        if (minIndex > i)  //交换
        {
            temp = num[minIndex];
            num[minIndex] = num[i];
            num[i] = temp;
        }
    }
    cout << "排序后" << endl;
    for (int i = 0; i < numlen; i++)
    {
        cout << num[i] << endl;
    }
}

————————————————————————————————————————

知识点二十三,数组元素的删除和插入
#include <iostream>
using namespace std;
int main()
{
    double power[99];    //数组大小一旦确定无法更改,所以预留足够大的空间
    int powerCount = 0;    //当前数组中的元素个数
    double insertPower;    //要插入的数值
    int insertIndex = 0;    //默认插入到第一个元素位置
    power[powerCount++] = 45771;
    power[powerCount++] = 42322;
    power[powerCount++] = 40907;
    power[powerCount++] = 40706;

    double temp;
    for (int i = 0; i < powerCount; i++)
    {
        for (int j = 0; j < powerCount - i - 1; i++)
        {
            if (power[j] < power[j + 1])
            {
                temp = power[j];
                power[j] = power[j + 1];
                power[j + 1] = temp;
            }
        }
    }
    cout << "排序后" << endl;
    for (int i = 0; i < powerCount; i++)
    {
        cout << power[i] << '\t';
    }
    cout << endl;

    //插入
    cout << "请输入要插入的数字" << endl;
    cin >> insertPower;
    insertIndex = powerCount;

    /*插入以后,保证数组仍然是有序的
    1、把新数字放在数组的末尾,重新进行排序
    2、找到第一个比插入数字打的位置insertIndex
       从最后一个元素开始,将数字复制到后面一个元素中
    3、将要插入的数字赋值给下标为insertIndex的元素*/


    //1、把新数字放在数组的末尾,重新进行排序
    for (int i = 0; i < powerCount; i++)
    {
        if (insertPower > power[i])
        {
            insertIndex = i;
            break;
        }
    }
    //    2、找到第一个比插入数字打的位置insertIndex。从最后一个元素开始,将数字复制到后面一个元素中
    for (int i = powerCount - 1; i >= insertIndex; i--)
    {
        power[i + 1] = power[i];
    }
    //3、将要插入的数字赋值给下标为insertIndex的元素
    power[insertIndex] = insertPower;
    //4、将数组的总长度+1
    powerCount++;
    cout << "插入后" << endl;
    for (int i = 0; i < powerCount; i++)
    {
        cout << power[i] << '\t';
    }

    //删除
    //1、找到要删除的元素下标
    double deletePower;
    int deleteIndex = int INT_MIN;  //INT_MIN相当于-1,表示“一个不存在的数值”
    cout << "请输入要删除的数字";
    cin >> deletePower;
    for (int i = 0; i < powerCount; i++)
    {
        if (deletePower == power[i])
        {
            deleteIndex = i;
            break;
        }
    }

    //判断是否找到这个数字
    if (deleteIndex == INT_MIN)
    {
        cout << "没有找到要删除的对象,删除失败!" << endl;
    }
    else
    {
        //2、从找到的下标开始,侯敏一个元素赋值给前面一个元素
        for (int i = deleteIndex; i < powerCount - 1; i++)
        {
            power[i] = power[i + 1];
        }
        //3、总长度-1
        powerCount--;
    }
    
    cout << "删除后:" << endl;
    for (int i = 0; i < powerCount; i++)
    {
        cout << power[i] << '\t';
    }
}

----------------------------------------------------------------------------------

知识点二十四,二维数组
//打印成绩表
#include <iostream>
#include <string>  //不添加这个,cout就不能输出string型
using namespace std;

int main()
{
    string stu_names[]{ "刘备","关羽","张飞" };
    string course_names[]{ "语文","数学","英语" };
    const int ROW = 3;
    const int COL = 3;
    double scores[ROW][COL];
    for (int i = 0; i < ROW; i++)  //外层循环控制学生(行)
    {
        for (int j = 0; j < COL; j++)  //内层循环控制课程(列)
        {
            cout << stu_names[i] << "的" << course_names[j] << "成绩:";
            cin >> scores[i][j];
        }
    }
    //打印结果
    cout << '\t';
    for (int i = 0; i < COL; i++)
    {
        cout << course_names[i] << '\t';
    }
    cout << endl;
    for (int i = 0; i < ROW; i++)
    {
        cout << stu_names[i] << '\t';
        for (int j = 0; j < COL; j++)
        {
            cout << scores[i][j] << '\t';
        }
        cout << endl;
    }
}

-----------------------------------------------------------------------------

知识点二十五,数组的替代品:向量容器vector
vector是一个快速的动态分配内存的数组  (容器)  ,大小可以动态扩展,可以在运行阶段设置长度
定义和初始化:
vector<double>vec1;
vector<string>vec2(5);
vector<int>vec3(20,998);  //给他20个元素,每一个元素都是998

操作方法:
#include <iostream>
#include <vector>  //使用vector所需要的头文件
#include <algorithm>  //使用sort所需要的头文件,这个单词的意思是“算法”


using namespace std;
int main()
{
    vector<double>vecDouble = { 98.5,67.9,43.6,32.9 };
    //向数组中插入数字
    vecDouble.push_back(100.8);  //在数组的尾部插入一个数字

    


    //遍历1
    for (int i = 0; i < vecDouble.size(); i++)    //vecDouble.sizi()表示:数组大小
    {
        cout << vecDouble[i] << endl;
    }

    //遍历2:集合的通用遍历方法,使用迭代器iterator

    //先得到它的迭代器
    vector<double>::iterator it;  //我要得到一个vector<double>类型的迭代器(得到迭代对象,实际上是一个指针对象)
    //从第一个元素开始迭代
    for (it = vecDouble.begin(); it != vecDouble.end(); ++it)
    {
        cout << *it << endl;
    }

    //排序
    sort(vecDouble.begin(), vecDouble.end());
    for (it = vecDouble.begin(); it != vecDouble.end(); ++it)
    {
        cout << *it << endl;
    }

    //逆序
    sort(vecDouble.begin(), vecDouble.end());

    reverse(vecDouble.begin(), vecDouble.end());  //逆序

    for (it = vecDouble.begin(); it != vecDouble.end(); ++it)
    {
        cout << *it << endl;
    }
}


---------------------------------------------------------------------------------

知识点二十六,指针(pointer)

#include <iostream>
using namespace std;
int main()
{
    double num = 1024.5;
    double*ptr_num = &num;
    cout << "ptr_num的值:" << ptr_num << '\t' << &num << endl;
    cout << "ptr_num指向空间的值是:" << *ptr_num << endl;
    return;
}

--------------------------------------------------------------------------------

知识点二十七,空指针null pointer
用法:
int *ptr1 = nullptr;   //等价于int *ptr1 = 0;
int *ptr2 = 0;         //直接将ptr2初始化为字面常量0

操作:
#include <iostream>
using namespace std;
int main()
{
    double *ptr_double = nullptr;
    cout << ptr_double << endl;
}

如果要直接使用:int *ptr3 = NULL;   //等价于int *ptr3 = 0
就需要头文件cstdlib


---------------------------------------------------------------------------------
知识点二十八,特殊指针类型 void*
可以存放任意对象的地址
#include <iostream>
using namespace std;
int main()
{
    double num = 3;
    double *ptr_num1 = &num;
    void *ptr_num2 = &num;
    cout << boolalpha;
    cout << (ptr_num1 == ptr_num2) << endl;
}

----------------------------------------------------------------------------------
知识点二十九,引用reference
给对象起了另外一个名字(引用即别名)

#include <iostream>
using namespace std;
int main()
{
    int int_value = 1024;
    int& refValue = int_value;   //赋值号右面只能写这样的变量名,不能写数值
    //如果要给赋值号右边写数值,前面必须加const
    const  int& refValue = 100;
}

---------------------------------------------------------------------------------------

知识点三十,指针和数组
double score[]{11,22,33,44,55};
double *otr_score = score;   //数组中,赋值号右边不加&

-----------------------------------------------------------------------------------

知识点三十一,指针的运算

指针的递增和递减++,--
int i;
double score[5]{98,87,65,43,76};
double *ptr_score;
ptr_score=score;
for(i=0;i<5;i++)
{
    cout<<*ptr_score++<<endl;    //这里指针描述的是位置
}

指针加上或减去某个整数值
int i;
double score[5]{98,87,65,43,76};
double *ptr_score;
ptr_score = &score[1];
ptr_score += 2;
cout<<*ptr_score<<endl;
ptr_score -= 3;
cout<<*ptr_score<<endl;  //并不是数值+2或-3,而是位置上的加减,出现加减变化的是下标

---------------------------------------------------------------------------------------------

知识点三十二,动态分配内存
使用new分配内存,使用delete释放内存
int *ptr_int = new int;
delete ptr_int;    //delete释放内存
例如
int *num = new int[5];   

动态分配的数组
int *intArray = new int[10];
delete[] intArray;    //delete[]释放整个数组

-------------------------------------------------------------------------------------------

知识点三十三,指针通过移动的方式访问数组
#include <iostream>
using namespace std;
int main()
{
    int arrays[]{ 15,23,30,40,50 };
    int *p_arrays = arrays;
    for (int i = 0; i < 5; i++)
    {
        cout << *p_arrays++ << endl;
    }
}

--------------------------------------------------------------------------------

知识点三十四,使用指针创建二维数组
#include <iostream>
using namespace std;
int main()
{
    int *p = new int[10];
    //使用指针创建二维数组
    int(*p2)[3] = new int[5][3];   //降维,把p2当做行来操作
    p2[3][2] = 998;

    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            cout << p2[i][j] << endl;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值