1.1 数组的创建
数组的创建方式
元素类型 arr_name 常量表达式(用于指定数组的大小)
例如:
int arr1 [10];
char arr3 [10];
float arr4 [1];
1.2 数组的初始化
完全初始化:
int arr1 [10]={1,2,3,4,5,6,7,8,9,10};
不完全初始化:
int arr2 [10]={1,2,3,4,5};
如果数组初始化了,可以不指定数组的大小,数组大小可以根据初始化内容确定。
char ch3 [ ]="abc";
这里数组的大小是4
abc还有\0
char ch4 [ ]={‘a' 'b' ' c' };
这里数组的大小是3 即abc
printf("%s\n",ch4);
打印的时候并不是abc 因为遇到\0才停下 但是什么时候停下来是未知的,因为不知道什么时候是\0
而printf("%s\n",ch3);
打印的结果就是abc 因为\0就在abc的后面
1.3 数组的使用
int a = 10;
printf("%d\n",size of(a));
结果是4
printf("%d\n",size of(int));
结果也是4
说明了求变量a和求相对应的类型 结果是一样的
那么作用在数组上也是一样的
int arr[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d\n",size of(arr));
printf("%d\n",size of(int [10]));
打印结果都是40
最后总结数组的两个方面
数组是使用下标来访问的,下标是从0开始的
数组的大小可以通过计算得到 int sz = size of(arr)/ size of(arr[0]);
1.4数组在内存中的储存
数组在内存中是连续存放的
随着下标的增长,地址是由低到高变化的
int *p=&arr[0];
p+i 和&arr[i]地址是一样的
printf("%d",*(p+i)); 解应用找到里面的地址
2.二维数组的创建和初始化
1.二维数组的创建
int arr[3][4]
char arr[3][4]
double arr[2][4]
2.二维数组的初始化
int arr[3][4]={1,2,3,4};
[1] [2] [0] [0]
[0] [0] [0] [0]
[0] [0] [0] [0]
int arr[3][4]={{1,2},{3,4}};
[1] [2] [0] [0]
[3] [4] [0] [0]
[0] [0] [0] [0]
int arr[][4]={{1,2},{3,4}};
[1] [2] [3] [4]
二维数组的行可以省略但是列不可以省略
3.二维数组的使用
二维数组的使用也是使用下标的方式
![](https://img-blog.csdnimg.cn/img_convert/c16a1a89b5bf49ccaa9d8984abd6b87e.png)
4.二维数组在内存中的储存
二维数组在内存中也是连续存储的
3.数组越界
数组的下标是有范围限制的,数组规定下标是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1,所以数组的下标小于0或者大于n-1,就是数组越界访问了。
4.数组作为函数参数
数组名是什么?
所有的数组名都表示数组首元素地址.
![](https://img-blog.csdnimg.cn/img_convert/321966450a9ea9c68cec174eb6bae69c.png)
但是有两个例外
sizeof(数组名)表示的是整个数组
&数组名 ,数组名表示整个数组
5.冒泡排序函数
![](https://img-blog.csdnimg.cn/img_convert/d41c2c5bd6fc1c56f8b2e87c72e3dd71.png)
谢谢观看!!