A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曦正 中级黑马   /  2016-2-18 08:13  /  722 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

数组

是什么?是一个数据类型——构造类型
作用:储存相同类型的数据
怎么用?数组类型包括元素类型及数组长度
如何声明?1.声明并赋值。2.先声明,再赋值
*********注意:一个数组只能在声明的时候才可以批量赋值;之后只能单个元素赋值;
数组的类型:1.数组元素类型;2.数组长度
数组传参问题:
数组是相互关联到一批数据到序列,序列中到数据称为数组成员,可按排列顺序编号,起始编号为“0”,下个元素编号递增“1”,通过编号可以唯一指定数组中的数据成员。
数组中的成员可以是基本类型(int,float,double,long,long long),也可以是构造类型;若成员是整型,则称整型数组,以此类推… …
数组通过名称区分和使用,名称是一个唯一的标识符,后面可以加上一对方括号界定的编号来指定一个数组成员,编号可以是一个数,也可以是变量,还可以是表达式。

数组的存储

1.数组的存储涉及到两个问题
每个成员要有存储空间且每个成员可以通过编号找到存储空间的位置;
2.数组的存储方法
分配连续的一块内存区能够存放得下所有的成员,然后将数组成员按编号顺序连续存放;“0”号成员存放在这块内存区的最前面,假设内存地址为start,由于每个成员所占存储空间的大小是相同的,假设为m个字节,此时第“i”个成员的内存地址就等于(start+m*i);
********注意:不同类型数组所占用字节数不同;

一维数组

1.语法:元素类型+数组名称+[常量表达式]={初始值表}
一维数组有多种声明方式,一般如下

int a[3];
a={1,2,3};
int a[3]={1,2,3};
说明:
1.元素类型是数组的成员类型;
2.常量表达式的值定义了数组的大小,且值必须为正整型,当提供了初值表时可以省略,这时以初值表中元素个数作为数组的大小;
3.初值表用于提供每个数组成员的初值,若不想提供初值,可以省略,无初始化的数组成员值时不确定的随机数,若有一个初始值的,则其它都为“0”,例如:

int a[10]={1};
//定义了10个int类型元素的数组a,第一个初始值为1,其它为0;
二维数组

二维数组是指有双下标的数组,可以看作以一维数组为元素构成的一维数组。
通常,二维数组可以看成是数学中的矩阵,因此,习惯上将一维数组下标称为“行标”,二维数组下标称为“列标”;
二维数组声明方式类似于一维数组;

int a[2][3]={{1,2,3},{4,5,6}};
//指的是一个二维数组a有两个元素,每个一维数组里有三个元素;
内存分配

二维数组是以行优先方式分配内存的,即行小者先分配,同行按列小先分配(参考CPU读取数据的方式——从上到下,从左到右);
二维数组与指针存在的对应关系:

a[0]=*(a+0);//取数组a地址里面第“0”个元素的内容
a[1]=*(a+1);//取数组a地址里面第“1”个元素的内容
a[0][1]=*(*(a+0)+1);//取数组a地址里面第“0”个元素中的第“1”个元素的内容
a[1][1]=*(*(a+1)+1);//取数组a地址里面的第“1”个元素中的第“1”个元素的内容
a[i][j]=*(*(a+i)+j);//取数组a地址中,第“i”个元素中的第“j”个元素
动态数组

静态内存分配

1.内存单元的分配方式是在编译时确定的,其大小和使用方式等在运行时不能被改变;
2.静态变量和自动变量的内存分配都是这种方式

动态内存分配

1.内存单元的分配方式在运行时就确定,分配的内存可以按不同的方式来使用;
2.动态分配的内存单元没有提供名称,只能通过地址(指针)来使用;
3.用于动态分配的内存空间称为堆(heap),分配和释放内存由C语言提供的一组函数来完成,通过头文件alloc.h和stdlib.h声明。
******注意:堆和堆栈(stack)时不同的内存区域,堆栈时具有先进先出特性的动态内存区域,用于定义自动变量;

2 个回复

倒序浏览
感谢分享.
回复 使用道具 举报
楼主辛苦了    感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马