数组的定义和初始化
数组是包含给定类型的一组数据,并将这些数据依次存储在连续的内存空间中。每个独立的数据被称为数组的元素。元素的类型可以是任意类型。数组本身也是一个结构,其类型由它的元素类型延伸而来。更具体地说,数组的类型由元素的类型和数量决定。如果一个数组的元素是T类型,那么该数组就称为“T数组”。例如:如果元素类型为int,那么该数组的类型就是“int数组”。然而,int数组类型是不完整的类型,除非指定了数组元素的数量。如果一个int数组有16个元素,那么它就是一个完整的对象类型,即“16个int元素数组”
一维数组的定义和初始化
数组的定义决定了数组名、元素类型以及元素个数
其语法如下:
<类型> 数组[<元素数量>];
元素数量在方括号([])之间,它必须是大于0的整数常量表达式。
#include<stdio.h>
int arr[5];//全局变量,均初始化为0
int main()
{
int brr[5];
for(int i=0;i<5;++i)
{
printf("%d ",brr[i]);//局部变量未定义打印出随机值
}
printf("\n");
for(int i=0;i<5;++i)
{
printf("%d ",arr[i]);
}
return 0;
}
下列做法错误
总结:C中数组大小在编译时确定,编译系统按照定义为数组分配一段连续的存储单元,这段单元的大小也是不能改变的,依次数组的大小不能用变量定义,而只能是一个正整数常量。
在C99标准中,定义数组的< 元素数量>可以是变量,多维数组也一样。
如int ar[n]; int aar[n] [m];n和m都可以是变量。VS编译器不支持C99标准
数值在内存的表
一维数组的使用
数组在存储单元中是顺序连续存放的,任何一个元素都可以单独访问,其标识方法是用数组名和下标;
数组名[整型表达式];整型表达式可以是变量,也可以是常量,但必须是整型类型。
必须for循环一个一个赋值
其他类型的数组
一维数组的应用举例
查表法是将一些事先计算好的结果,存储在常量数组中,用到是直接按下标取数据,以节省运行时的计算时间。是以空间换时间。
改进算法
二维数组
二维数组的定义
类型名 数组名[行表达式][列表达式];行与列用常量表达式
二维数组的逻辑和物理(内存)表示
一个二维数组,在本质上是有多个一维数组构成(每个一维数的大小必须相同)
如:定义int ar[3][4]的二维数组,它是由3个一维数组组成,每个一维数组的大小是4个整型元素。
可以只对部分元素赋值,未赋值的元素自动取0值(如图所示:是按行优先存储)
如果对二维数组的初始化,那么第一维的长度可以缺省,第二维不可缺省
二维数组的使用
二维数组中的元素是通过使用下标(即数组的行索引和列索引)来访问的
C语言中的多维数组基本的定义是以数组作为元素构成的数组,二维数组的数组元素是一维数组,三维数组的数组元素是一个二维数组,以此类推,也就是说,多维数组用的是一个嵌套的定义。
数组与函数
一维数组作为函数的实参
二维数组作为函数的实参