数组的特点:
- 连续的存储空间
- 所有变量的数据类型必须相同
- 所有数据占用的字节大小都相等
为什么需要数组:
为了解决大量同类型数据的存数和使用问题
用数组可以模拟线性的现实世界、//如向量、矩阵、张量等
大部分语言提供了数组这种数据存储结构
数组的缺点:
- 数组的长度是一定的,无法改变
- 查找数据不方便
- 我们通常用一种以数组为内核的工具代替原始的数组来用
/**
* 数组基本定义
*/
int a[5] = {1, 2, 3, 4, 5}; //完全初始化
int a[5] = {1, 2, 3};//不完全初始化,未被初始化的元素自动为零
int a[5]; //所有元素值为垃圾直
int a[5] = {0} //清零,每个元素都为零
int a[5] = {1, 2, 3, 4, 5};
int b[5];
//如果要把a数组中的值全部复制给b数组
//错误的写法:
b = a;//error!数组的名字代表数组第一个元素的地址
//正确的写法:
for(i=0; i<=4, i++)
b[i] = a[i];
//键盘输入数组元素的数值:
scanf(“%d”,a[0]);//键盘输入a[0]
/**
* 二维数组
*/
//初始化
int a[3][4] = { {1, 2, 3, 4}, {5, 6, 7,8}, {9, 10, 11, 12} };
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
//输出二维数组内容:用for—for结构,用格式控制符可以对输出格式控制
//多维数组
//是否存在多维数组(答:不存在,因为内存是线性一维的)
//n维数组可以当做每个元素是n-1维数组的一维数组
/**
* 数组遍历
*/
# include <stdio.h>
int main() {
//a是数组的名字,5表示数组的个数,并且这5个元素分别为a[0],a[1],a[2],a[3],a[4]
int a[] = {1,2,3,4,5};
for (int i=0; i<sizeof(a)/sizeof(a[0]); i++) { //数组占内存总空间,除以单个元素占内存空间大小
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}
/**
* 臭名昭著的冒泡排序
*/
# include <stdio.h>
int main() {
int a[8] = {2, 1, 3, 7, 5, 6, 4, 8};
int length = sizeof(a)/sizeof(a[0]);
//core
int t;
for(int i=0; i<length-1; i++) {
for(int j=0; j<length-1-i; j++) {
if(a[j] < a[j+1]) { //从大到小
t= a[j];
a[j]= a[j+1];
a[j+1]= t;
}
}
}
//以上为核心算法
for(int i=0; i<=7; i++) {
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}