C/C++中数组学习笔记

一维数组

一维数组定义的三种方式:

  1. 数据类型 数组名【数组长度]

  2. 数据类型 数组名【数据长度】 = {值1,值2,值3,....}

  3. 数据类型 数组名 【】 = {值1,值2,值3,.........}

数组的使用

数组名其实是一个指向数组第一元素的指针,可以使用数组名+数字的方式访问数组元素地址和其值

int arr[5] = {1,2,3,4,5};
cout << "arr[1] = " << *(arr+1) << endl;
cout << "arr[1]地址:" <<arr+1 << endl;

运行结果:

arr[1] = 2

arr[1]地址:0x505294

数组遍历:数组长度无法直接获取,但是可以使用sizeof操作符计算其字节数然后除以数组数据类型长度来获取。

int arr[5] = {1,2,3,4,5};
int arrl = sizeof(arr)/sizeof(arr[0]);
for(int i = 0;i<arrl;i++)
    cout << arr[i] << " ";
cout << endl;

运行结果

1 2 3 4 5

练习

练习1:读取数组最大值:

#include <cstdlib>
#include <iostream>
#include <string>
#include <time.h>
​
using namespace std;
​
int main()
{
    //生成随机数组
    srand(time(NULL));
    int arr[10];
    for (int i = 0;i<10;i++)
    {
        arr[i] = random()%100;
        cout << arr[i] << " ";
    }
    cout <<endl;
    int max = 0;
    for(int i=0;i<10;i++)
    {
        if(arr[i]>max)
        {
            max = arr[i];
        }
    }
    cout<< "数组最大值为:" << max << endl;
    return 0;
}

练习2.:数组倒转

#include <cstdlib>
#include <iostream>
#include <string>
#include <time.h>
​
using namespace std;
​
int main()
{
    //生成随机数组
    srand(time(NULL));
    int arr[10];
    for (int i = 0;i<10;i++)
    {
        arr[i] = random()%100;
        cout << arr[i] << " ";
    }
    cout <<endl;
    int arrl = sizeof(arr)/sizeof(arr[0]);
    for(int i=0;i<arrl/2;i++)
    {
        int tem = arr[i];
        arr[i] = arr[arrl-i-1];
        arr[arrl-i-1] = tem;
    }
    for (int i=0;i<arrl;i++)
        cout << arr[i] << " ";
    cout << endl;
    return 0;
}

输出结果:

27 2 33 53 10 64 23 46 94 41 41 94 46 23 64 10 53 33 2 27

练习3:冒泡排序实现

#include <cstdlib>
#include <iostream>
#include <string>
#include <time.h>
​
using namespace std;
​
int main()
{
    //生成随机数组
    srand(time(NULL));
    int arr[10];
    for (int i = 0;i<10;i++)
    {
        arr[i] = random()%100;
        cout << arr[i] << " ";
    }
    cout <<endl;
    int arrl = sizeof(arr)/sizeof(arr[0]);
    for(int i=0;i<arrl;i++)
    {
        for(int j=0;j<arrl-i-1;j++)
        {
            if (arr[j] > arr[j+1])
            {
                int tem = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tem;
            }
        }
    }
    for (int i=0;i<arrl;i++)
        cout << arr[i] << " ";
    cout << endl;
    return 0;
}

运行结果

74 9 10 61 0 55 86 19 92 62 0 9 10 19 55 61 62 74 86 92

二维数组

二维数组定义方式

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

  1. 数据类型 数组名 [行数] [列数] = {{值11,值12,值13,...}, {值21,值22,值23,...} , ....};

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

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

二维数组声明时行数不是非必须,赋值也非必须,但是数据类型、数组名、列数必须声明

二维数组的使用:

二维数组名也是一种特殊的指针,指向第一行的地址,但是其指向的是第一行所在的数组地址,使用数组名+数字N的方式访问的是第N行的第一个元素。可以将二维数组看作是数据类型为一维数组,数组长度为行数的一维数组。也就是,一维数组中的元素为一个个数组。

int arr[2][3] = {1,2,3,4,5,6};
cout << arr + 1 << endl;        // 输出的是第二行首元素地址
cout << *(arr + 1) << endl;     // 输出的是第二行首元素的地址
cout << *(*(arr + 1)) << endl;  // 输出的是第二行首元素的值
cout << *((arr+1)+1) << endl;   // 输出的是第二行第二个元素的地址
cout << *(*(arr+1)+1) << endl;  // 输出的是第二行第二个元素的值
cout << *(*(arr) + 1) << endl;  // 输出的是第一行第二个元素的值

输出结果:

0x7ffc18a7ef0c
0x7ffc18a7ef0c
4
0x7ffc18a7ef18
5
2

二维数组的遍历:

int arr[2][3] = {1,2,3,4,5,6};  //声明一个2行三列的数组
int rown = sizeof(arr)/sizeof(arr[0]);  //计算二维数组的行数
int coln = sizeof(arr[0])/sizeof(arr[0][0]); //计算二维数组的列数
cout << "二维数组行数:" << rown << endl;
cout << "二维数组列数:" << coln << endl;
for(int i=0;i<2;i++)
{
    for(int j=0;j<3;j++)
    {
        cout << arr[i][j] << " ";
    }
    cout << endl;
}

输出结果:

二维数组行数:2

二维数组列数:3

1 2 3 4 5 6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值