一维数组的创建和初始化
数组的创建
数组是一组相同的类型的元素的集合 数组的创建方式: 数组的元素类型 数组名 [常量表达式数组的大小] ; 注:[]中要给一个常量才可以,不能使用变量。
数组的初始化
数组的初始化: 是指在创建数组的同时给数组的那内容一些合理初始值 字符串和字符数组存储区别:
char arr1[] = "abc";//=>实际存储的是{'a','b','c','\0'}
char arr2[3] = {'a','b','c'};
一维数组的使用
数组是使用下标来访问的,下标从0开始。 数组大小计算:
int len=sizeof(arr)/sizeof(arr[0]);//sizeof()求数据类型的字节数
一维数组在内存中的使用
1.数组在内存当中一定是连续存放的(线性存储)。
二维数组的创建和初始化
创建
int arr[3][4];
初始化
int arr[3][4]={1,2,3,4};
int arr[3][4]={{1,2},{4,5}};//=》{{1,2,0,0},{4,5,0,0},{0,0,0,0}};
二维数组在内存中也是连续存储的
数组作为函数参数
数组传参
数组传参发生降维(降级,退化),降维目的节省成本,降维成其内部元素(元素:int,float,double,数组,指针)类型的指针,函数传参产生临时变量,调用时产生,调用完释放。
数组名
数组名是数组首元素的地址数组名只有在两种情况下代表整个数组: (1) sizeof(数组名): 计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。 (2) &数组名:取出的是数组的地址,数组名代表整个数组其他情况代表数组首元素的地址
数组地址内存分布
一维数组
int arr[10];
分析: 首先内存中的地址是以16进制存储,然后&arr[0]是首元素的地址,元素是整型,分配4个字节空间,实际上地址指向的是元素对应类型分配的字节空间的最小字节的位置(一般就是第一个字节的位置),故&arr[1]就是在&arr[0]的地址加4就是第二个元素的地址,以此类推。
二维数组:
int arr[3][4];
内存分析:
总结:
数组不能单独看待,必须把数组整体来看待,开辟空间时数组整体开辟和释放。数组在内存当中一定是连续存放的(线性存储)。二维数组可以看做一维数组,不过二维数组中的元素是一维数组。C语言中任何维度的数组都是线性的(地址依次递增的)。数组只定义未初始化,元素值乱码替代。数组可以整体初始化,不能整体赋值。数组访问的方式:地址访问和指针访问。传参int arr[]等价int arr,访问arr[i]等价(arr+i)指针加1看似加1,其实是加上其所指向类型的大小 (类型的字节数)。数组传参一般而言必须带上数组元素个数(因为数组发生降维,无法获取数组元素个数),字符串传参不用带元素个数,自身以‘\0’结尾带长度。0,null(指针),’\0’在数值上都是0,类型不同。