• 数组


    ■ 概述

      数组,就是一个集合,里面存放了相同类型的数据元素

    ■ 特点

      1) 数组中的每个数据元素都是相同的数据类型

      2) 数组是由连续的内存位置组成,数组里的数据放在一块连续的内存空间

    ■ 一维数组

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

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

    int arr[5];
    arr[0] = 10;
    arr[1] = 20;
    arr[2] = 30;
    arr[3] = 40;
    arr[4] = 50;

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

    int arr[5] = {10,20,30,40,50};

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

    int arr[] = {10,20,30,40,50}; //编译器可以通过大括号元素的个数推测数组的长度
    int arr[];   //报错,定义数组的时候,必须要有初始长度

    ◆ 总结

      1) 数组名的命名规范与变量名的命名规范一直,不要与变量重名

      2) 数组下标识是从0开始索引的

    □ 一维数组数组名

    ◆ 一维数组名的用途

       1) 可以统计整个数组在内存中的长度 

    sizeof(arr[0])  //获取数组第一个元素所占内存大小
    sizeof(arr)  //获取数组所占内存大小

       2) 可以获取数组在内存中的首地址

    cout << arr << endl; //返回数组arr的内存地址
    cout << &arr[0] << endl;  //返回数组arr第一个元素的内存地址

        3) 数组名是常量,不可以进行赋值操作

    arr = 100; //报错

    ■ 二维数组

    □ 二维数组定义

    二维数组就是在一维数组上,多加一个维度

    □ 二维数组声明

      声明有以下四种方式:

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

    int arr[2][3];
    
    arr[0][0]=1;
    arr[0][1]=2;
    arr[1][0]=3;
    arr[1][1]=4;
    arr[2][0]=5;
    arr[2][1]=6;
    
    for(int i = 0; i < 2 ; i ++)
    {
        for(int j = 0; j < 2 ; j ++)
        {
            cout << arr[i][j] << endl;
        }
    } 

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

            更加直观,提高代码的可读性,推荐使用

    int arr1[2][3] = 
    {
      {1,2,3},
      {4,5,6}
    }

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

    int arr[2][3] = {1,2,3,4,5,6}; 

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

         该种方式会通过初始数据元素和列数自动推算出行数,但是仅通过行数缺无法推断出列数,比如行数是3,则到底是每行1个元素还是每行2个元素,是无法推测的

    int arr[][3] = {1,2,3,4,5,6}; 

        注意:当进行初始化定时,可以省略行数,但不可以省略列数

    □ 查看二维数组所占内存空间

    int arr1[2][3] = 
    {
      {1,2,3},
      {4,5,6}
    }
    
    cout << sizeof(arr1) << endl;  //输出:24
    cout << sizeof(arr1[0]) << endl;  //输出:12,二维数组第一行占用内存
    cout << sizeof(arr1[0][0]) << endl;  //输出:4,二维数组第一元素占用内存
    cout << sizeof(arr1)/sizeof(arr1[0]) << endl;  //输出:2,二维数组的行数
    cout << sizeof(arr1[0])/sizeof(arr1[0][0]) << endl;  //输出:3,二维数组的列数
    
    double arr2[2][3] = 
    {
      {1,2,3},
      {4,5,6}
    }
    cout << sizeof(arr2) << endl;  //输出:48

    □ 获取二维数组首地址

    cout << arr1 << endl;   //返回二维数组的首地址
    cout << arr[0] << endl;   //返回二维数组第一行首地址,与二维数组的首地址相同
    cout << arr[1] << endl;   //返回二维数组第二行首地址,与二维数组的首地址相同
    cout << &arr[0][0] << endl;   //返回二维数组第1元素的首地址,与二维数组的首地址相同,查看具体元素的地址需要使用取址符
    cout << &arr[0][1] << endl;   //返回二维数组第1元素的首地址,与二维数组的首地址相同,查看具体元素的地址需要使用取址符
  • 相关阅读:
    前台组件
    IntelliJ IDEA 简体中文专题教程
    干货分享 | 创业公司绝对不会告诉你他们在用的工具们
    线程的基本概念 / 计算机程序的思维逻辑
    Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
    【转载】 准人工智能分享Deep Mind报告 ——AI“元强化学习”
    (待续)【转载】 DeepMind发Nature子刊:通过元强化学习重新理解多巴胺
    【转载】 机器学习算法岗的常见面试问题及准备
    【转载】 180623 Conda install 本地压缩包文件tar.bz2
    2017年 某次 实验室会议 —— 记
  • 原文地址:https://www.cnblogs.com/shiliye/p/13983645.html
Copyright © 2020-2023  润新知