乐趣区

关于c++:C-C入门教程五-数组

5 数组

5.1 概述

所谓数组,就是一个汇合,外面寄存了雷同类型的数据元素

特点 1:同一个类型

特点 2:存储空间间断

5.2 一位数组

5.2.1 一位数组的定义形式

三种定义形式:

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

第三种定义方法并不是没有数组长度,而是编译器会依据你前面的值的数量主动生成一个长度。

5.2.2 数组名的用处

能够统计数组在内存中的长度

能够获取数组在内存中的首地址

思考:

我当初有一个数组 int arr[10] 此时,arr代表的是第一个元素的地址

那么,arr+1 应该和 &arr[1] 一样,代表的是第二个元素的地址

如果是 &arr[0] + 1 呢,代表的是第一个元素的第二个字节的地址么?

对于数组名的几种应用,对于数组名的意义,我做了一个试验,写了代码如下:

#include<iostream>
using namespace std;

int main() {int arr[7]{5,2,0,1,3,1,4};
    cout << "&arr[0] =" << (int)&arr[0] << endl;
    cout << "arr =" << (int)arr << endl;
    cout << "&arr[1] =" << (int)&arr[1] << endl;
    cout << "arr + 1 =" << (int)(arr + 1) << endl;
    cout << "&arr[0] +1 =" << (int)(&arr[0] + 1) << endl;
    cout << "&arr + 1 =" << (int)(&arr + 1) << endl;
    
    cin.get();
    return 0;
}

别离对应几种组合,最初输入如下:

&arr[0] = 11794864

arr = 11794864

&arr[1] = 11794868

arr + 1 = 11794868

&arr[0] +1 = 11794868

&arr + 1 = 11794892

能够最初看进去 arr 指向的是数组的第一个元素,在这个根底上,无论是 arr + 1,还是&arr[1],还是&arr[0] + 1 对应的都是第二个元素。

然而 &arr 尽管地址也是第一个元素的地址,然而实际上是指向整个数组的地址。所以 &arr + 1 地址上会间接加上 28。

那问题来了,之前的笔记提过,数组作为参数传入函数是只有第一个元素的地址的。那能够尝试用这种办法么?

事实是,这种语法是被禁止的。在函数的参数中写 & 会被当成援用。

5.3 二维数组

5.3.1 二维数组定义形式

四种定义形式:

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

倡议应用第二种办法,并且每一行数据独自成行,能够进步代码的可读性。

5.3.2 数组名的用处

能够统计数组在内存中的长度

能够获取数组在内存中的首地址

思考:

如果当初有一个二维数组int arr[i][j],和一维数组雷同。arr 示意第一个元素,然而也能够用 arr[n] 来示意第 n+1 行的首地址。

退出移动版