C++数组

引言

C++数组_第1张图片

 5.2 一维数组

5.2.1 一维数组的定义方式

C++数组_第2张图片

数组的特点:
1. 放在一块连续的内存空间中
2. 数组中每个元素都是相同的数据类型
我们可以通过下标访问数组中的元素
 

#include 
using namespace std;
int main()
{
    // 数组的学习
    // 3钟定义的形式
    // 1.数据类型 数据名【数组长度】
    int array[5];
    array[0] = 10;
    array[1] = 20;
    array[2] = 30;
    array[3] = 40;
    array[4] = 50;
    // 2. 数据类型 数组名【数组长度】 = {值1,值2}
    int array2[5] = {1,2,3,4}; // 如果初始化的时候,没有全部写完,会用0填充
    // 3.数据类型 数组名【】 = {值1,值2}
    // 定义数组时,必须有初识的长度
    int array3[] = {11,22}; //以1,2,3填充

    // 访问数组中的元素
    for(int i=0;i<5;i++){
        cout  << array[i] << endl;
        cout << array2[i] << endl;
        cout << array3[i] << endl;
        cout << "========" << endl;
    };
    return 0;
}

C++数组_第3张图片

5.2.2 一维数组组名

一维数组名称的用途:
1. 可以统计整个数组在内存中的长度
2. 可以获取数组在内存中的首地址

#include 
using namespace std;
int main()
{
    // 数组的学习
    int array[5] = { 1, 2, 3, 4, 5 };

    // 统计数组的长度
    cout << sizeof(array) << endl; // 20 ,一个int占4字节,5个一个20字节
    // 统计数组中某一个元素所占的空间
    cout << sizeof(array[0]) << endl; // 4 ,获取到4个字节,
    //计算数组的个数
    //    cout << "计算数组的个数 = " << sizeof(array) / sizeof(array[0]) << endl; // 5
    cout << sizeof(&array) << endl; // 对数组取地址,获取到数组指针,32位系统占4字节,64占8字节。面试题。
    cout << sizeof(*array) << endl; // 对数组取*,获取到数组的第一个数据,int,占4字节。面试题。
    return 0;
}

#include 
using namespace std;
int main()
{
    // 数组的学习
    int array[5] = {1,2,3,4,5};
    // 统计数组的长度
    cout << sizeof(array) << endl; // 20 ,一个int占4字节,5个一共20字节
    // 统计数组中某一个元素所占的空间
    cout << sizeof(array[0]) << endl; //4 ,获取到4个字节,
    //计算数组的个数
    cout << "计算数组的个数 = " << sizeof(array)/sizeof(array[0]) << endl; //5

    // 可以通过数组名查看数组的首地址
    cout << "数组的首地址(十六进制)" << array << endl; // 结果是:十六进制数
    cout << "一个元素的首地址" << (long long)&array[1] << endl; // 查看首地址

//   cout << "数组的首地址(十进制)=" << int(array) << endl; // 根据视频,我的这里会报错:指针转换到较小的类型会丢失信息。
    // 根据弹幕,大家都是这样写
    cout << "数组的首地址(十进制)" << (long long)array << endl; // 结果是:十六进制数

    // 百度结果:可以用C的printf()函数,似乎结果不对
    printf("数组array的地址是:%d!\n",array);
    printf("数组array的地址是:%d!\n",&array);

    return 0;
}

数组名是一个常量,不可以进行赋值的操作

练习案例:五只小猪称重
案例描述:
在一个数组中记录了五只小猪的体重,如:int array[5] = {300,20,120,320,21};
找出并打印最重的小猪。
 

#include 
using namespace std;
int main()
{
    // 五只小猪称重
    int array[5] = {300,20,120,320,21};
    int x = array[0]; //定义一个值,先保存第一位,以此进行比较

    for(int i=0;i < int(sizeof(array)/sizeof(array[0]));i++)
    {
        // 1. 使用三目运算符
        (array[i]>x?x = array[i]:x);
//        x = (array[i]>x?array[i]:x);
        // 2.使用循环
        /*
        if (array[i]>x)
        {
            x = array[i];
        }
        */
    };
    cout << "最大值是" << x << endl;
    return 0;
}

练习案例:数据元素逆置
案例描述:
请声名一个5个元素的数组,并将其逆置。
如原数组为1,2,3,4,5,则逆置后输出5,4,3,2,1。
 

#include 
using namespace std;
int main()
{
    // 数组逆置
    int array[] = {1,2,3,4,5};
    // 保存数组的起始和结束的下边
    int start = 0;
    int end = sizeof(array)/sizeof(array[0])-1;
    cout << "开始的下标" << start << endl;
    cout << "结束的下标" << end << endl;

    // 1.利用while循环进行逆置
    while(start <= end)
    {
        int temp;
        temp = array[start];
        array[start] = array[end];
        array[end] = temp;
        start++;
        end--;
    }
    cout << "排序结束" << endl;
    for(int i = 0;i<5;i++)
    {
        cout <

冒泡排序
C++数组_第4张图片

#include 
using namespace std;
int main()
{
    // 冒泡排序
    // 排序的总轮数:元素个数-1
    // 每轮对比次数:元素个数 -排序轮数 -1

    int array[5] = {21,1,324,435,20};
    for(int j=0;j<5-1;j++){
    for(int i=0;i<5-j-1;i++)
    {
        if(array[i]>array[i+1])
        {
            int temp = array[i];
            array[i] = array[i+1];
            array[i+1] = temp;
        }
    }
    }

    // 排序后打印结果
    for(int i=0;i<5;i++)
    {
        cout << array[i] << endl;

    }
    return 0;
}

 5.3 二维数组

二维数组就是在一维数据的基础上,多加一个维度
C++数组_第5张图片

#include 
using namespace std;
int main()
{
    //设置随机数种子
    srand((int)time(NULL));

    // 二维数据
    //定义1
    int array[2][3];
    array[0][0] = 1;
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<3;j++)
        {
            array[i][j] = rand()%100; // 取得 [ 0 , 10 ) 的随机整数:rand()%10 ;

        }
    }
    //定义2
    int array1[2][3] = {{1,2,3},{4,5,6}};
    // 定义3
    int array2[2][3] = {1,2,3,4,5,6}; // 不建议使用
    // 定义4
    int array3[][3] = {1,2,3,4,5,6}; //可以省略行,不可以省略列
    
    // 打印二维数组
    cout << "打印二维数组" << endl;
    cout << "随机数"<< rand()%100 << endl;

    for(int i = 0;i<2;i++)
    {
        for(int j = 0;j<3;j++)
        {
            cout << array[i][j]  << endl;
        }
    }
    return 0;
}

5.3.2 二维数组组名

查看二维数组的空间
获取二维数组的地址

数组中的地址是连续的,间隔是每个元素的大小。

C++数组_第6张图片

#include 
using namespace std;
int main()
{
    // 案例
    string name[3] = {"张三","李四","王五"};
    int array[3][3] = {{100,100,100},{90,50,100},{30,70,80}};
    for(int i=0;i<3;i++){
        int score =0;
        for(int j=0;j<3;j++)
        {
            score += array[i][j];
            cout << array[i][j] << endl;
        }
        cout << "第" << i << "的成绩" << score << endl;
        cout << name[i] << "成绩=" << score << endl;

    }
    return 0;
}

5.4使用new创建二维数组,赋值,并释放空间

面试题

#include 
using namespace std;
void test01()
{
    char(*p)[3] = new char[2][3];
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            p[i][j] = 'a';
        }
    }

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            cout << p[i][j] << " ";
        }
        cout << endl;
    }

    delete[] p;

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            cout << p[i][j] << " ";
        }
        cout << endl;
    }
}

void test02()
{
    char** pp = new char*[2]; //二级指针为创建new一级指针的指针
    for (int i = 0; i < 2; i++) {
        pp[i] = new char[3]; // pp[2][3]
    }
    //赋值
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            pp[i][j] = 'v';
        }
    }
    //打印
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            cout << pp[i][j] << " ";
        }
        cout << endl;
    }
    //销毁
    for (int i = 0; i < 2; i++) {
        delete[] pp[i];
    }
    delete[] pp;
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            cout << pp[i][j] << " ";
        }
        cout << endl;
    }
}
int main()
{
    //    test01();
    test02();
}

你可能感兴趣的:(C++,c++)