1. 一维数组的创建和初始化
数组:数组是一组相同类型元素的集合。
数组的创建方式:
arr[(非零的整数,常量,不能为变量)];
数组的初始化:
int arr1[10] = {1,2,3};
int arr2[] = {1,2,3,4};
int arr3[5] = {1,2,3,4,5};
char arr4[3] = {'a',98, 'c'};
char arr5[] = {'a','b','c'};
char arr6[] = "abcdef";
在函数内定义的数组在栈上,如果没初始化,则为乱码;
数组不能整体赋值;只能一个个赋值;(数组可以整体初始化,但是不能整体赋值)
int arr[];
int num=sizeof(arr)/sizeof(arr[]);
for(int i=;i<10;i++)
{
arr[i]=i;
}
2. 一维数组的使用
a:数组是使用下标来访问的,下标是从0开始。
b:数组的大小可以通过计算得到。
3. 一维数组在内存中的存储
a:数组不能单独看待,必须把数组看作整体,开辟空间是数组整体开辟,整体释放。
b:数组在内存中一定是连续存放的(线性存储)。
c:数组地址是由高到低 排布的,arr[0]的地址是其最低地址向上连续读取4个 就能拿到数组中存的内容。(段地址加偏移量)
d:对于数组取地址时,取的是其对应的最低的地址。
e:数组在哪个区域放置取决于数组在哪定义;数组怎么排布取决于其类型,永远是线性存储。
4. 二维数组的创建和初始化
二维数组的创建:
数组的第一个[]中的数字可以省略。
int[][4];
怎样理解二维数组:二维数组可以看作一维数组,只不过其中元素是一维数组。数组也相当于一个类型,相当于数组放数组。多维数组可以将其理解为线性的树状图。
初始化:
int arr[3][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} };
int arr[3][4] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int arr[3][4] = { 0 };
5. 数组作为函数参数
a:数组作为函数参数的时候,会发生降维,降维成指向其内部元素(可能是int,double,float,数组,指针)的指针。
b:二维数组降维成一维数组指针
c:指针指向数组的时候,可以有两种方案访问数组;数组本身也有两种访问方式;
d:数组实际进行访问时:
1:采用 [ ] 进行元素缩影 arr[ i ]
2:*(arr+i)
注:对指针+1,其实是加上其所指向类型的大小;
数组传参一般而言必须带上数组元素的个数(字符串可以不带,字符串有自然结束位\0)
数组名只有在两种情况下才能代表整个数组:sizeof()中单独使用;在数组名前带&代表整个数组;其他情况全部表示数组首元素的地址。
&arr[0]+1 等价于 arr+1
&arr+1 中+1代表加上整个数组的大小
注:各位读者阅读完本文,如果对你有所帮助,还请一键三连哦!如果文章有不妥之处,欢迎在下方评论指出!