本篇文章将介绍C语言中的数组以及应用
概念
数组 就是一组相同类型元素的集合
数组创建时括号里是常量表达式
变长数组C99语法才支持
数组的创建与初始化
请看下面代码 数组的创建
int arr1[8];
char arr2[5];
int数组初始化 不完全初始化的时候 int类型数组后面默认补0
//完全初始化
int arr3[10] = {1,2,3,4,5,6,7,8,9,10};
//不完全初始化
int arr4[10] = {1,2,3}; //剩下的全是0
//根据初始化内容确定数组大小
int arr5[] = {1,2,3,4,5};
char类型数组初始化 不完全初始化后面默认补\0
char ch1[5] = {'h','i'}; //剩下的默认是'\0'
char ch2[] = {'h','i'}; //这样写没有'\0'
char ch3[5] = "hi"; //后面默认全是'\0'
char ch4[] = "hi"; //后面也会跟一个'\0'
数组的访问
访问数组用的是下标引用操作符 请看下面的代码
int arr[10] = {0};
arr[4] = 5; //下标引用操作符
printf("%d\n",arr[4]);
//数组个数计算
int len = sizeof(arr)/sizeof(arr[0]);
printf("%d\n",len);
一维数组在内存中的存储
请看以下代码 %p是打印地址
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
for(i = 0 ; i < 10 ; i++){
printf("arr[%d]===%p\n",i,&arr[i]);
}
最后结果是这样的
arr[0]===000000000062FDF0
arr[1]===000000000062FDF4
arr[2]===000000000062FDF8
arr[3]===000000000062FDFC
arr[4]===000000000062FE00
arr[5]===000000000062FE04
arr[6]===000000000062FE08
arr[7]===000000000062FE0C
arr[8]===000000000062FE10
arr[9]===000000000062FE14
可以发现 一维数组在内存中是连续存放的
随着数组下标的增长 地址是由低到高变化的
所以我们访问数组的时候也可以用指针访问 请看下面代码
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int* p = arr; //数组名是首元素的地址
int i = 0;
for(i = 0 ; i < 10 ; i++){
printf("%d\n",*p);
p++;
}
二维数组
二维数组中的元素都是数组元素
二维数组的创建
int arr[3][4]; //3行4列
初始化
//初始化
int arr1[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
//不完全初始化
int arr2[3][4] = {1,2,3,4,5}; //后面默认补0
//另一种不完全初始化
int arr3[3][4] = {{1,2},{3,4},{4,5}};
//二维数组的行可以省略 列不可以省略
int arr4[][4] = {{2,3},{4,5}};
二维数组在内存中的存储也是连续存储的
int i = 0;
int* p = arr4;
for(i = 0 ; i < 12 ;i++){
printf("%d\n",*p);
p++;
}
冒泡排序
void bubble_sort(int arr[],int len){
int i = 0;
int j = 0;
for(i = 0 ; i < len-1 ; i++){
for(j = 0 ; j < len-1-i ; j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}