数组
两个重要的符号:
strien是求字符串长度的,只针对字符串长度,是一种库函数,使用时必须引用头文件
sizeof计算变量、数组类型的,大小单位是字节,是一种操作符
一维数组的创建和初始化
数组的创建:数组是一组相同类型元素的集合,数组的创建方式
type_t arr_name [const_n];//type_t是指数组的元素类型;const_n是一个常量表达式,用来指定数组的大小
注意:数组创建,[]中要给一个常量才可以,不能使用变量
数组是使用下标来访问的,下标从0开始
数组的大小可以通过计算得到
int arr[10];
int sz = sizeof(arr)/sizeof(arr[0])//求元素个数
数组在内存中是连续存放的(又低地址到高地址)
二维数组的创建和初始化
二维数组的创建:
int arr[3][4];//3行4列的数组
char arr[3][5];//3行5列的数组
double arr[2][4];//2行4列的数组
二维数组的初始化:
数组在内存中都是连续存放的,数据不足时,会先出示数据前几个元素,后面默认为0
当出现一个以上花括号时,类似于多个一维数组的初始化
int arr[3][4]={1,2,3,4,5};//第一行补充完整,第二行第一个是0,其余行都为0
int arr[3][4]={{1,2,3},{4,5}};//第一行是1,2,3,0;第二行是4,5,0,0
谨记:行可以省略,列不能省略
当行省略后,有几个花括号就几行
访问二维数组,也是通过下标来实现的,类似于数学的二维坐标轴的坐标
二维数组在内存中的存储:像一维数组一样
其他多维数组
int box[10][20][30];
//10个二维数组(每个二维数组都是20行20列)堆叠而成,类似于数学中的空间坐标轴
以上讲的关于二维数组的相关内容同样适用于三维数组或更多维数组,通常,处理三维数组要使用3重嵌套循环,处理4维数组要使用4重嵌套循环,以此类推。
数组的使用:冒泡排序
往往写代码的时候,我们会将数组作为函数参数传个函数,比如:冒泡排序法的使用
#include<stdio.h>
void bubble_sort(int arr[])//进行传参
{
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);//由于传参时传的是地址,所以成了指针,两相同指针大小相除就得到结果1
for (i = 0; i < sz - 1; i++)
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++)//每一趟冒泡排序的操作
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
int main(void)
{
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);//确定数组元素个数
bubble_sort(arr);
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
订正:
#include<stdio.h>
void bubble_sort(int arr[], int sz)
{
int a = 0;
int j = 0;
for (a = 0; a < sz; a++)
{
for (j = 0; j < sz - 1 - a; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
int main(void)
{
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}