对数组的总结

 

经过近一个月的学习,现本人对数组有一定的理解与看法,下面进行对数组的总结。

数组的创建分两步,第一步是定义一个数组类型的变量;第二步是初始化数组。需要知道的是数组的定义是一组具有相同类型的变量的集合。

数组包含数组名和数组的下标,数组的每个数据项叫做属于元素。

数组的使用方法为:①(一维数组)数组类型 数组名[下标]

                    ②(二维数组)数组类型 数组名[下标1][下标2]。

一维数组指的是一串数据,也可以认为是一组元素;二维数组指的是一个坐标系、也可以认为是一个有两种元素的表格。

在此需要明确的是:①元素在数组中定义的时候,数组名代表数组首地址,一定是个常量!

                ②数组在c与c++中,下标都是从0开始的。

                ③为数组进行初始化的字符串是可写的。

                ④数组定义完成后,其范围大小不能改变,因此在定义数组的时候,尽量要放大范围定义,以防止下标越界。

                ⑤不要认为数组元素a[i]代表数组元素的值,它代表是数组元素本身。

                ⑥cout输出时遇到’\0’时就不再输出。

对于一维数组a[3]={1,2,3};

①&a[0]; //取数组第一个元素的地址。

②a; //数据名不是数组的地址,是数组第一个元素的常量地址,与&string[0]等价。

③&a; //这个才是数组的地址。

一维数组声明:值的类型(不能使引用)、数组名和元素数(用值大于1的常量表达式定义)

int& a[10];//错误,没有引用数组。

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

int (&p)[6] = a;//p是数组a的引用。

2、数组元素初始化时,若没有显式提供元素初值,则元素会被像普通变量一样初始化:

1)函数体外定义的内置类型数组,元素初始化为0;

2)函数体内定义的内置类型数组,元素无初始化(若只初始化部分元素,其后的元素此时也会被初始化为0);

3)如果不是内置类型,则不管其在哪定义,自动调用其默认构造函数为其初始化,若该类无默认构造函数则会报错。

3、数组大小未知时,需要动态声明一维数组:

int* a = new int[2];

delete[]a;//数组使用完毕时要释放内存空间。

4、C风格字符串:末尾必须有一个字符’\0’。

1)字符串常量,以双引号括起,编译器自动在末尾添加一个空字符 。

2)末尾添加了’\0’的字符数组。

5、字符数组:既可以用一组由括号括起来、逗号隔开的字符常量进行初始化,也可以用一个常量字符串(末尾有空字符)进行初始化 。

注意:在使用处理C风格字符串的标准库函数时,牢记参数必须以结束符NULL结束;

 

对于二维数组a[2][3]={1,2,3,4,5,6};首先说明的是C++语言中并没有多维数组,通常所说的多维数组其实就是数组里面的元素的内容还是数组。

①&a[0]; //取数组第一个元素的地址,也就是第一个内层数组的地址。

②a; //数据名是第一个内层数组的指针。

③&a; //这个是整个二维数组的地址。

C++规定,在声明和初始化一个二维数组时,如果对二维数组的所有元素都赋值,则第一维(行数)可以省略;

①在C/C++中,二维数组按照行优先顺序连续存储,即先将第一行按顺序存储,再对第二行顺序存储;

②一个二维数组元素a[x][y]在一维数组b中,是a[x][y]=b[x*列数+y];

③二维数组的动态声明:

产生一个二维数组a[m][n]

int m = 5,n=3;

int **a = new int* [m];

for (int i = 0; i < m; i++)

{

    a[i] = new int [n];

}

只能用a[i][j]或者((a+i)+j)来访问数组的元素;

动态声明的数组,使用后需要释放内存

数组在定义的一开始可直接赋值,数组定义后没有进行初始化的数组系统会默认其中的元素为随机数,因此最好一开始就对数组中的元素进行定义。数组的赋值需要用循环语句,其中的元素在运算的过程中不可以进行赋值。需要注意的是,若输入不合法,则会数组跳出循环。

对字符数组的一点心得:

①char数组二维时可看作是字符串数组,即多个字符串;

②末尾有一个空字符\0(NULL,ASCII码为0)表示存放的字符串结尾(在用gets或scanf输入字符串时自动在字符串末尾添加,占用一个字符位),如果用scanf的%s或gets输入字符串(如用getchar),结尾一定要加入\0,否则printf和puts输出会出现乱码。

③分别赋值:char str[15] = {'a',.....,};

④直接赋值(仅限初始化):char str[15] = “bad story”;

⑤scanf输入:%c 能够识别空格跟换行并将其输入

⑥%s 通过空格跟换行来识别一个字符串的结束,(输入时数组名前不需要取地址符

⑦getchar()/putchar():单个字符的输入输出。

⑧gets()/puts(): 用来输入/出一行字符串,gets识别换行符\n作为输入结束,如果用scanf输入完后使用gets,要使用getchat()吸收掉换行符后再使用gets。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值