5、数组

来源:互联网 发布:怎么看数据库密码 编辑:程序博客网 时间:2024/06/17 00:18

说明

  • 数组:相同数据类型的成员组成的⼀组数据
  • 数组元素:构成数组的数据。
  • 数组下标:数组元素位置的索引
  • 数组维度:数组下标的个数

分类

  • 数值数组:用来存储数值
  • 字符数组:用来存储字符 ‘a’,而不是“a”
  • 指针数组:用来存放指针(地址)
  • 结构数组:用来存放一个结构体类型

一维数组

定义

类型说明符 数组名[常量表达式]={值1,值2,…};
- 类型说明符:任一种基本数据类型或构造类型
- 数组名:自定义的数组标识符
- 常量表达式:表示数组元素的个数,也称数组的长度
注意事项:
- 数组的长度可以是常量,也可以是常量表达式,不可以是变量(在Xcode里允许,但是定义的时候不能初始化,初始化了就会报错)

//[]里面只能是常量,不能是变量int a = 3;int array2[a];//这句话不会报错,因为没有初始化int array3[a] = {121314};//但是这句话会报错,提示:变量大小的对象不能初始化
  • 数组的长度可以使用宏定义:#define PI 3.14

初始化

  • 如果数组没有进行初始化,数组里也是有值的,但值是什么不确定 ,可能是一些垃圾值,所以我们在定义数组的时候要给他初始化
  • 如果进行了部分初始化,那么数组所有元素均是有值的,没有被初始化的元素,系统默认分配为0
//代表给数组中第4个元素初始化为11,其余元素为0int  a[10]={[3]=11};
  • 字符数组没有初始化的元素也会被系统初始化为ASCII码值为0的字符:’\0’

数组的存储方式

  • 计算机会给数组分配一块连续的存储空间
  • 数组名存放的是数组的首地址,数组名是一个常量,是不允许被赋值的;从首地址开始,依次存入数组的第1个、第2个、第n个元素
  • 每个元素占用相同的字节数
  • 元素之间的地址是连续的
  • 先定义的数组分配在高地址
  • 数组每个元素地址公式:x+sizeof(int) * 下标 //x是数组首地址+每个元素所占字节数 * 该元素下标
    数组的存储方式

一维数组长度计算方法

  • 方法一:数组元素个数明确时,个数即数组长度
  • 方法二:sizeof( 数组名 )/sizeof( 数组元素类型 ) //数组占用的总字节数/数组元素占用字节数
  • 方法三:对于字符数组来说:strlen(数组名);也可以计算其长度,此长度并未计算 ‘\0’

冒泡排序

    for (int i = 0; i<10-1; i++) {        for (int j = 0; j<10-1-i; j++) {            if (a[j]>a[j+1]) {                t = a[j];                a[j] = a[j+1];                a[j+1] = t;            }        }    }

字符数组

用于存放字符变量的数组,属于一维数组,元素类型是char
四大函数:
- strlen():计算字符串长度,遇到’\0’结束,一个汉字占3个字节
- strcpy():字符串拷贝
strcpy()
- strcat():字符串拼接
strcat()
- strcmp():字符串比较,比较的是字符对应的ASCII码表的值,依次进行相减, 结果为0表示相等,1(正数)代表a大,-1(负数)代表b大;alt点击查看函数详情
strcmp()


二维数组:双下标数组

二维数组

  • 二维数组定义时,可以不指定第一维的长度,但必须指定第二维的长度
  • 元素个数不足,会自动补0
  • 元素个数 = 下标一 * 下标2
  • 下标一:行数,代表数组里的元素个数(对于一维数组来说,它内部的元素是下标一个一维数组)
int b[2][3] = {1,2,3,4,5,6};  //相当于:{{1,2,3},{4,5,6}}

字符串数组:存放字符串的数组

char 数组名[常量表达式1][常量表达式2] = {值1, 值2, …};

char strings[3][10] = {“iPhone” , “Android” , “win8” };//该数组包含三个字符串

引用:

  • 访问某个字符串:数组名[第一维下标], %s
  • 访问某个字符:数组名[第一维下标][第二维下标], %c
    注意事项:
  • 字符串数组实为 字符型 二维数组
  • 每个字符串长度不可超过(第二维长度-1)
  • 每个字符串用数组名加一维下标表示:a[0]//代表第一个字符串

例题

字符串数组


多维数组:数组下标在2个以上

定义

int a[2][4][3] = {0};  //表示整形的三维数组,2层4行3列,元素个数为2*4*3 = 24个

遍历

for(int i = 0; i < 层数; i++){    for(int j = 0; j < ⾏数; j++){        for(int k = 0; k < 列数; k++){            a[ i ][ j ][ k ] = xxx;        }    }}
  • 多维数组理论上维数可以任意
  • 多维数组的元素个数 = 各维数个数乘积
  • 多维数组占用内存 = 元素个数 * 单个元素所占空间
  • 多维数组每多一个[常量表达式]就多一个维度,几维就对应几层循环

整形变量修饰符

改变整形变量所占存储空间

整型常量:4个字节,共占32位,损耗内存空间,因此需要节省空间
修饰符包括:

类型名 所占字节数 占位符 short 2字节 %hd int 4字节 %d long 8个字节 %ld long long 8个字节 %lld
short int a=6;//此时int只占2个字节

改变一个数的符号

signed
unsigned //表示:原来最高位用作表标识一个数的正负,现在用来参与计算
计算机默认的是有符号数,无符号数用%u输出

unsigned short d = 0-1;//0-1一般用于计算某种类型最大数是多少
0 0