1.数组的概念

    • 数组是有序数据的集合,要寻找数组中的某一个元素必须给出两个要素,数组名和下标。数组名和下标惟一的标识数组中的一个元素。
    • 数组是有类型属性的。同一数组中的每个元素必须属于同一数据类型。一个数组在内存中占一片连续的存储单元。

      • 如:有一个整型数组a,假设数组的起始地址为2000,则数组在内存中的存储情况为

        1. ![批注 2020-08-11 095912.png](https://cdn.nlark.com/yuque/0/2020/png/2314091/1597112306135-58384a5c-4ba8-436d-bd69-73e43c4285d7.png#align=left&display=inline&height=288&margin=%5Bobject%20Object%5D&name=%E6%89%B9%E6%B3%A8%202020-08-11%20095912.png&originHeight=576&originWidth=266&size=35052&status=done&style=none&width=133)
    • 引入数组就可减少变量的定义,使程序精炼。

    • 用方括号表示下标,如:s[1],s[2]。

    2.一维数组的定义和引用

    • 数组是同一类型的一组值,在内存中顺序存放。
    • 整个数组共用一个名字,其中每一项又称为一个元素。
    • 定义方式

      • 类型说明符 数组名[常量表达式];

        • 例:
          int a[4]; //表明数组由4个int型元素组成
          
          序号从0开始。其元素分别为:a[0]、a[1]、a[2]、a[3]。
      • C++不允许对数组的大小作动态定义,即数组的大小不能是变量,必须是常量。

      • 如要根据不同的数值改变数组的大小,可用常量表达式。
        • 如:
          #define SIZE 50
          void main(void)
          {
          int art[SIZE];
          .....
          }
          
    • 一维数组元素的引用

      • 数组必须先定义,具体引用时(赋值、运算、输出)其元素等同于变量。
      • 例:
        void main(void)
        {
        int i,a[10];
        for(i=0;i<10;i--)
           a[i]=i;
        for(i=9;i>=0;i--)
           cout<<a[i]<<'\t';
        cout<<"\n";
        }
        
    • 一维数组的初始化

      • 在定义数组的同时给数组元素赋值。
      • 注意:

        • 对数组中的一部分元素列举初值,未赋值的部分是0。

          int a[10] = {0,1,2,3,4,5};
          int a[10] = {0,1,2,3,4,5,0,0,0,0};
          
        • 不能给数组整体赋值,只能一个一个地赋值

          int a[10]={0,1,2,....,9};//非法
          
        • 可以用 int a[ ]={0,1,2,3,4,5}; 给数组赋值,编译器会自动计算出元素项数,并将数组定义为该长度。

        • 用局部static或全局定义的数组不赋初值,系统均默认其为’\0’。即存储在静态数据区中的数组其元素默认为0.
    • 例:求Fibonacci数列:1,1,2,3,5,8,……..的前20个数,即

    F1=1 (n=1)
    F2=1 (n=2)
    Fn=Fn-1+Fn-2 (n>=3)

    void main(void)
    {
        int i;
        int f[20]={1,1};
        for(i=2;i<20;i++)
            f[i]=f[i-1]+f[i-2];
        for(i=0;i<20;i++)
        { if(i%5==0)  cout<<"\n";
          cout<<f[i]<<'\t';
        }
    }
    

    3.二维数组的定义和引用

    • 定义方式
      • 类型说明符 数组名[常量表达式] [常量表达式];
      • 例: int a[3][4]; //表明a数组由3*4个int型元素组成,其元素分别为:a[0][0] ,a[0][1], a[0][2],a[0][3],a[1][0],a[1][1] ,a[1][2],a[1][3],a[1][0],a[2][0],a[2][1],a[2][2],a[2][3]。

    若存放首地址为2000H,则在内存中为:
    批注 2020-08-11 095912.png

    • 在内存中多维数组依然是直线顺序排列的,第一个元素位于最低地址处。
      • 二维数组的引用
    • 与一维数组一样,二维数组必须先定义,其维数必须是常量,具体引用时其元素等同于变量。
      • 二维数组的初始化
    • 分行赋值

      int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};//依次赋值
      
    • 顺序赋值

      int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; //依次赋值
      
    • 部分赋值

      int a[3][4] = {{1},{5},{9}};
      //a[0][0]=1,a[1][0]=5,a[2][0]=9 其余元素为0
      
    • 分行或全部赋值时,可以省略第一维,第二维不可省。

      int a[][4] = {{1,2},{5,6,7,8},{9,10,11,12}};
      
    • 不能给数组整体赋值,只能一个一个地赋值

      int a[2][3] = {1,2,3,.....,12};
      
    • 用static定义的数组不赋初值,系统均默认其为’\0’.

      static int a[2][3];
      
    • 例:有一个3*4的矩阵,要求求出其中值最大的那个元素的值,以及其所在的行号和列号。
      //打擂台法
      max=a[0][0]; //使max开始时取a[0][0]的值 
      for (i=0;i<=2;i++) //从第0行到第2行 
        for (j=0;j<=3;j++) //从第0列到第3列 
            if (a[i][j]>max)//如果某元素大于max
            {       max=a[i][j]; //max将取该元素的值 
                    row=i; //记下该元素的行号i 
                    colum=j; //记下该元素的列号j 
                    }
      cout<<row<<‘\t’<<colum<<‘\t’<<max<<endl;