C语言提供了一种功能,用来创建一组有序的数据,称之为“数组”
定义数组
int grades[100];
将grades声明为一个包含100个整型元素的数组。使用0~99的下标就可以调用这些数据。
tips:编译器不会检查数组的越界问题,如果引用数组的150号下标元素,不会出现问题,但是取不到我们想要的数据,程序员自己要清楚数组的越界问题。
例如 int buf[5] = {“12345”}
此时的数组已经越界了 用strlen(不统计\0)来测buf数组大小此时为6,已经不准确了。
初始化数组
完全初始化:
int arr[5] = {1,2,3,4,5};
定义了一个整型数组并且全部初始化
char str[5] = {‘A’, ‘B’, ‘C’, ‘D’,’E’};
定义了一个字符数组str并且初始化为 ‘A’ ‘B’ ‘C’ ‘D’ ‘E’
部分初始化:
数组可以不用全部初始化,int arr[3]={1}; 就是把arr[0]=1,其他没有初始化的将被设定为0。
数组写零:
int arr[3]={};
数组名左值与右值
右值:数组名可以作为右值,表示该数组首元素的首地址。
注意:arr,&arr,&arr[0]的值相同,即表达的内容相同。
int *p = arr; == int *p =&arr[0];
左值:数组名不可以作为左值。原因:1.数组名在编译后为常量只读。2.数组作为一个整体,没有匹配的数值与其空间对应。
数组做为函数入参时
数组名作为函数参数时就退化为了一个指针
传递进去的是它首元素的首地址。
因此在函数中对于数组进行操作时,要加上数组的大小(lenth)。
(1)利用数组实现冒泡排序:
(2)利用数组实现选择排序:
(3)利用数组实现进制的装化:
(4)利用传值调用实现冒泡排序
(5)利用传值调用实现选择排序:
(6)利用传值调用实现数组中的元素互换
(7)二分法查找数组中的数
7.1 循环
7.2 递归
(8)利用传值调用实现数组元素的循环向右移动