文章时效性提示
本文发布于 517 天前,部分信息可能已经改变,请注意甄别。
数组是一组相同类型元素的集合。type_t arr_name [const_n]
type_t 指的就是数组的元素类型。
const_n 是一个常量表达式,用来指定数组的大小。
int arr[10];
创建一个数组,存放整型变量,10个char arr2[5];
创建一个数组-存放字符-5个
1 | int n = 5; |
上面的方式是不行的,方括号内必须是常量表达式,不能是变量。float arr4[1];
创建一个数组,存放float型数据,1个double arr5[3];
创建double型数组,存放3个数据
数组的初始化
int arr[10] = {1,2,3};
上面是一个不完全初始化,只有前三个是1,2,3,剩下的元素默认是0。char arr2[5] = {'a','b'};
上面是一个char型数组的不完全初始化,前两个分别是a,b,剩下的默认是0。char arr2[5] = “ab”;
上面是一个char型数组的不完全初始化,前三个分别是a,b,\0,剩下的默认是0。char arr2[] = “abcdef”;
上面的数组根据初始化内容确定数组大小,大小是7,分别是abcdef和\0。
1 | char arr[] = "abcdef"; |
打印的结果是7 6,sizeof计算\0,strlen不计算\0。
1、strlen和sizeof没有什么关联。
2、strlen只能求字符串长度。
3、sizeof是计算变量、数组、类型的大小,单位是字节。
4、strlen是库函数,需要引用头文件,sizeof是操作符,不需要引用库文件。
总结:
数组是使用下标来访问的,下标是从0开始。
数组的大小可以通过计算得到。int sz = sizeof(arr)/sizeof(arr[0]);
一维数组在内存中的使用
1 |
|
打印的结果是:
&arr[0] = 0x16fdff1b0
&arr[1] = 0x16fdff1b4
&arr[2] = 0x16fdff1b8
&arr[3] = 0x16fdff1bc
&arr[4] = 0x16fdff1c0
&arr[5] = 0x16fdff1c4
&arr[6] = 0x16fdff1c8
&arr[7] = 0x16fdff1cc
&arr[8] = 0x16fdff1d0
&arr[9] = 0x16fdff1d4
通过上面的结果得知,数组在内存中连续存放。
二维数组的创建和初始化
二维数组的创建:
1 | int arr[3][4];//创建一个三行四列的数组 |
二维数组的初始化:
1 | int arr[3][4] = {1,2,3,4,5};//第一行存不下就去第二行 |
二维数组不完全初始化,后面的值默认是0。int arr[][] = {1,2,3,4,5,6,7,8};
上面的写法是错误的,列不能省略,行可以。int arr[3][] = {{1,2,3,4},{5,6,7,8}};
上面的写法是错误的,列不能省略,行可以。int arr[][4] = {{1,2,3,4},{5,6,7,8}};
上面的写法是可以的,行可以省略。
二维数组的使用:
二维数组通过下标使用。
1 |
|
打印的结果是:
1 2 3 0
4 5 0 0
0 0 0 0
二维数组在内存中的存储
1 |
|
打印的结果是:
&arr[0][0] = 0x16fdff278
&arr[0][1] = 0x16fdff27c
&arr[0][2] = 0x16fdff280
&arr[0][3] = 0x16fdff284
&arr[1][0] = 0x16fdff288
&arr[1][1] = 0x16fdff28c
&arr[1][2] = 0x16fdff290
&arr[1][3] = 0x16fdff294
&arr[2][0] = 0x16fdff298
&arr[2][1] = 0x16fdff29c
&arr[2][2] = 0x16fdff2a0
&arr[2][3] = 0x16fdff2a4
二维数组和一维数组一样,也是连续的。
数组一是用来存储数据,二是用来传递参数。
数组作为函数参数
往往我们在写代码的时候,会将数组作为参数传个函数,比如:我要实现一个冒泡排序(这里要讲算法思想)函数将一个整形数组排序。
冒泡排序
假设一组数据:10,9,8,7,6,5,4,3,2,1(10和9比较)
比较一次:9,10,8,7,6,5,4,3,2,1(10和8比较)
比较两次:9,8,10,7,6,5,4,3,2,1
比较三次:9,8,7,10,6,5,4,3,2,1
……
9,8,7,6,5,4,3,2,1,10
上面的一趟冒泡排序让10回到了最终位置,下面可以对其他数字冒泡排序。
9,8,7,6,5,4,3,2,1,10
8,9,7,6,5,4,3,2,1,10
8,7,9,6,5,4,3,2,1,10
……
8,7,6,5,4,3,2,1,9,10
对每个数字进行冒泡排序,最终效果
……
1,2,3,4,5,6,7,8,9,10
10个元素进行冒泡排序,需要进行9趟(n-1趟)
1 |
|
break语句只用于for和switch循环。
数组名是什么?
——数组名是首元素地址(有2个例外)
1、sizeof内部单独放数组名
此时数组名表示整个数组,计算整个数组大小,单位是字节。
2、&arr,取地址数组名
数组名代表整个数组,取出的是整个数组的地址。