1.6 数组

来源:互联网 发布:90后听的经典网络歌曲 编辑:程序博客网 时间:2024/05/02 00:44

1.6 数组

  • 构造类型:用户按一定的规则进行数据类型的构造,如定义数组,指针,结构和引用等

一维数组

  • 数组:相同类型的元素的有序集合.每一个元素在内存中占用相同大小的内存单元,这些内存单元在内存空间中都是连续存放的.
  • 在使用数组前,需要对数组进行定义以通知编译器为其开辟相应的内存空间.
  • 每个元素所对应的内存空间或在数组中的位置,可用同一的数组名,加上下标运算符”[]”指定下标序号来唯一确定.
1.一维数组的定义和引用
  • 格式:
    <数组类型> <数组名>[<常量表达式>];
  • “[]”里的常量表达式必须是一个确定的整型数值,且数值必须大于0.
  • 数据类型用来指定数组中元素的数据类型,以及一个元素所占内存空间的大小
  • 一般地,数组方括号中的常量表达式中不能包含变量,但可以包括常量和符号常量
  • 引用格式:
    <数组名>[<下标表达式>]
  • C++数组的下标序号总是从0开始.
  • 在引用数组元素时,下标序号的值必须为整型,因此它可以是一个整型变量,整型常量或结果为一个整型值的表达式
  • 数组定义后,编译器会根据数组的大小开辟相应的内存空间,并按照下标序号从小到大次序依次存放数组中的各个元素.
  • 所开辟的内存大小(字节数)等于数组元素个数*sizeof(数组类型)
2.一维数组的初始化和赋值
  • 初始化格式:
    <数据类型> <数组名>[<常量表达式>] = {初值列表};
  • 初值列表的个数不得多于数组元素的个数,且多个初值之间用逗号隔开.
  • 可以给其中的一部分元素赋初值
  • 在对数组进行初始化时,若没有明确列举元素值的元素,其值均为0
  • 在初始化的"={初值列表}"中,花括号的初值可以是常量,也可以是常量表达式,但不能有变量
  • 在全部一维数组元素赋初值时,可以不指定一维数组的长度,由编译器自动识别.
  • ={初值列表}“只限于数组的初始化,不能出现在赋值语句中
int c[4];c[4]={1,2,3,4};//错误
  • 两个一维数组不能直接进行赋值”=”运算

二维数组

在C++数组定义中,数组的维数是通过方括号的对数来指定的.

1.二维数组的定义和引用
  • 格式:
    <数据类型> <数组名>[<常量表达式 1>][<常量表达式 2>];
  • 数组定义中维的高低,从右向左逐渐升高
  • 数组的个数是各维所指定的大小的乘积
  • 引用格式:
    `<数组名>[<下标表达式 1][下标表达式 2];
2.二维数组元素在内存空间存放的次序
  • 在内存中一次存放的数组元素的下标序号总是从低维到高维顺序变化
  • 如有int a[3][4];
    则a在内存中存放的元素一次按数组元素下标序号变化的次序顺序排列
3.二维数组的初始化和赋值
  • 在程序设计中,常将二维数组看成一个具有行和列的数据表\
  • 若有int a[3][4];,则它在内存空间的存放次序
    这里写图片描述
  • 在C++中,行的数据由”{}”构成,且每一对”{}”根据书写的次序依次对应二位数组的第0行,第1行,第2行…
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  • 可以只对部分元素赋值,没有明确列举的元素,其值均为0
  • 对于多维数组来说,若有初始化,则定义数组时,可以忽略最高维的大小,但是其他维的大小不能省略

字符数组

  • 字符数组:当定义的数组的类型为char,则该数组为字符数组
  • 在C++中,可用字符串常量来初始化字符数组,或通过字符数组名来引用字符串
1.一维字符数组
  • 两种初始化方式
char ch[] = {'H','e','l','l','o','!','\0'};//注意,要加上'\0'char ch1[] = {"Hello!"};//其中的花括号可以省略
  • 注意,由于字符串常量是以’\0’作为结束符的,所以当字符数组使用字符串常量进行初始化时,要注意数组的长度还应该包括这个结束符
  • 如果指定的数组长度大于字符串中的字符个数,那么其余元素将自动设定为’\0’
  • 注意,不能将字符串常量直接通过赋值语句赋给一个字符数组.
2.二维字符数组
  • 二维字符数组可以存放多个字符串
  • 二维数组的最右边的大小应不小于初始化初值列表中最长字符串常量的字符个数+1

数组和函数

  • 传址调用:如果传递参数是某个内存空间的地址,则对这个函数的调用就是按地址传递的函数调用.
  • 由于函数形参和实参都是指向同一个内存空间的地址,形参值的改变就是实参地址所指向的内存空间的内容改变,从而实参的值也将随之改变.
  • 使用数组名作为函数的实参和形参时,由于数组名表示数组内存空间的首地址,因此是函数的地址传递
  • 调用时,只要将数组名作为实参即可
  • 形参的数组也可以不指定大小,在定义数组后面跟一个空的方括号
原创粉丝点击