第六章
一、数组的概念
数组是共享一个名字的一组具有相同类型的连续存放的变量的集合
数组是一组有序数据的集合
数组中各数据的排列是有一定规律的,下标代表数据在数组中的符号
所有的数组元素具有统一的数据类型
数组名是数组的首地址,scanf输入整型数组每个元素是连续存放的
数组元素是由数组名和下标唯一确定
二、一维数组
①怎样定义一维数组
一维数组的定义方式为
类型标识符数组名[常量表达式]
其中
类型标识符:任一种基本数据类型或者是构造数据类型
数组名:自己定义的数组标识符,遵从标识符命名规则
常量表达式表示数组的长度,也是元素的个数
注意:
(1) 数组名不能和变量名相同
(2) 定义的时候要指定数组中的元素个数
常量表达式可以包括常量和符号常量比如int[3+5]是合法的
但是不可以包括变量 int a[n]是不合法的
C不允许对于数组的大小进行动态定义
不过
如果在被调用的函数中(不包括main)中定义数组
其长度可以是变量或者非常量的表达式
比如
Void func(int n)
{ int a[2*n] //合法的 n的值从实参中传来
调用func函数时形参n从实参中得到值
这种情况叫做“可变长数组”,允许在每次调用func时有不同的n
不过每次使用的时候数组的长度是固定的
(3) 数组的大小不可以是浮点常量
(4) 定义数组的时候不能没有数组长度 int a[] 非法
②一维数组元素的引用
数组元素是组成数组的基本单元
数组元素也是一种变量
引用的格式
数组名[数组下标]
其中数组下标只可以是整型常量或者整型表达式
如果是小数的话c编译的时候会自动取整
数组在定义之后
数组名代表数组的首地址
其中的元素按照下标依次存放而且下标从0开始!
数组定义之后
系统将给其分配一定的内存单元
其所占内存单元的大小和数组元素的类型和数组的长度有关
数组所占内存单元字节数=数组大小*sizeof(数组元素类型)
其中
Int 2字节(TC中)编译器不同可能不同
Char 1
Short 1
Long 4
Float 4
Double 8
比如要引用a[2] 就会先计算2000+2*2=2004 然后再从2004中取出内容
注意事项
(1) 只可以逐个引用数组的元素,不能一次性引用整个数组(所以常用循环)
(2) 数组引用要注意越界问题
C语言对于数组不作越界检查,但是下标超范围会死机或者程序错误
(3) 一般对于数组长度会采用宏定义define
③一维数组的初始化
如果对于一维数组不赋初值,则为随机数
对于数组元素的赋值,叫做数组的初始化
不赋值不叫初始化
数据类型符数组变量名[常量表达式]={表达式1…表达式n}
(1) 在定义数组时对全部数组元素赋予初值
Inta[5]={1,2,3,4,5};
数组的元素要放在花括号里边,元素之间用逗号隔开
花括号里边的数据叫做“初始化列表”
(2) 也可以只给数组中的一部分元素赋值
Inta[5]={1,2,3};
则只给前三个赋值,后边两个自动为0
(3) 如果想让一个数组中的元素全部都为0,可以写
Int a[5]={0,0,0,0,0}; 或者
Int a[5]={0};//未赋值的部分自动为0
(4) 在对全部数组元素赋初值的时候
由于元素的个数确定可以不用指定数组的长度
Int a[]={1,2,3,4,5};
虽然是没有指定长度不过系统会自动默认是5
不过不可以 int a[];
所以如果要定义的长度比赋值的长度长,就要写下标
注意:
表达式的个数不能超过数组变量的大小
如果定义数值型数组的时候未被初始化列表指定初始化的都是0
如果定义字符型数组的时候未被初始化列表指定初始化的都是’\0’
如果定义指针型数组的时候未被初始化列表指定初始化的都是NULL空指针
C语言除了在定义数组变量时可以对数组整体赋值之外无法再全体赋值
所以
Char a[3]
A={‘1’,’2’,’3’}
A[]={‘1’’2’3’};
A[3]={‘1’’2’’3’}; 都是错的
所以数组定义后只能用赋值语句一一赋值
Char str[80];
Str[0]=’b’ str[1]=’y’ str[2]=’e’ str[3]=’\0’ //数组str赋值为一字符串bye
一般一维数组的赋值使用循环语句
④一维数组程序举例
冒泡法折半查法斐波那契数列请见第二章书上出现的算法
三、二维数组
①怎样定义二维数组
类型符数组名[常量表达式][常量表达式];
二维数组可以看作特殊的一维数组
它的元素又是一维数组
a[0] a[0][0] a[0][1] a[0][2]
a[1] a[1][0] a[1][1] a[1][2]
a[2] a[2][0] a[2][1] a[2][2]
数组元素的存放顺序
已行序优先最右下标变化最快
二维数组的a[0]a[1]
不可以当成数组元素变量使用
对于a[0]是数组名
是a[0][0] a[0][1] a[0][2]的地址
二维数组的存贮空间
是先按照行序再列的
比如float a[3][4] 一共有12个元素
由于是float类型每个元素占四个字节所以一共是48个字节
存储顺序a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23
②怎样引用二维数组
数组名[下标][下标]
对于int a[4][5]
以及a[4][5]有什么差别
前者定义了4行五列的二维数组最多引用到a34
而a45 说明引用到了第五行和第六列则至少应该为int a[5][6]
③二维数组的初始化
数据类型数组变量名[行常量表达式][列常量表达式]=
{{第0行初值表},{第1行初值表},…{最后1行初值表}}
(1) 分行给二维数组赋初值
Int a[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};
(2) 可以把所有数据都放在一个花括号内,按照数组元素排列顺序依次赋值
Int a[3][4]={1,2,3,4,5,6,7,8,9,0,1,2};
(3) 可以对于部分元素赋初值
Int a[3][4]={{3},{4},{5}};
也可以只对某几行赋值
(4) 定义的时候第一维长度可以省略第二维不能省略
Int a[][4]={{0,0,3},{},{1,2}}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论