C语言学习笔记 - 数组
本笔记为看B站郝斌老师C语言教程所作笔记
因为之前已经看过一部分,笔记写在了本子上,故本笔记前面不做重复记录
1.数组
为什么要用数组:
1、为了解决大量同类型数据的存储和使用的问题
2、为了模拟现实世界
int a[5] = {1, 2, 3, 4, 5};
//a数组名字;5数组个数,且这五个元素分别用a[0]、a[1]、a[2]、a[3]、a[4]表示。
//a[0] = 1、a[1] = 2、a[2] = 3、a[3] = 4、a[4] = 5
2.数组的分类
1)一维数组 int a[5]
要求:
- 为n个变量连续分配空间
- 所有的数据类型必须相同
- 所有变量所占字节大小必须相等
例如:int a[5]
有关一维数组的操作:
初始化:
完全初始化:
int a[5] = {1, 2, 3, 4, 5};
//a[0] = 1、a[1] = 2、a[2] = 3、a[3] = 4、a[4] = 5;
不完全初始化:未初始化的元素自动为零
int a[5] = {1, 2, 3};
//a[0] = 1、a[1] = 2、a[2] = 3、a[3] = 0、a[4] = 0;
不初始化:所有元素是垃圾值
int a[5] ;
//a[0] = 垃圾值、a[1] = 垃圾值、a[2] = 垃圾值、a[3] = 垃圾值、a[4] = 垃圾值;
清零:所有元素赋值为零
int a[5] = {0};
数组错误写法
int a[5];
a[5] = {1, 2, 3, 4, 5}; //这里a[5]只得是数组内的第五个数字,但实际没有a[5],最大只有a[4]
//错误,只有在定义数组的同时才可以整体赋值,其他情况下整体赋值都是错误的
int a[5] = {1, 2, 3, 4, 5};
a[5] = 100;
//错误,没有a[5],最大只有a[4]这个元素
赋值:
int a[5] = {1, 2, 3, 4, 5};
int b[5] ;
如果把a[5]中的数据赋值给b[5]
错误写法:b = a; //一维数组名不代表数组的所有元素,代表数组读一个元素的地址。
正确写法:for(i=0; i<5; ++i) {b[i] = a[i];}
排序:
求最大/最小值:
倒置:
查找:
插入:
删除:
以上算法自己写或询问度娘
2)二维数组 int a[3][4]
概览:
int a[3][4]
总共是12个元素,可以当作3行4列看待
这12个元素名字依次是:
int a[0][0] ; int a[0][1] ; int a[0][2] ; int a[0][3];
int a[1][0] ; int a[1][1] ; int a[1][2] ; int a[1][3];
int a[2][0] ; int a[2][1] ; int a[2][2] ; int a[2][3];
int a[i][j] :表示第i+1行,第j+1列
int a[m][n] :该二维数组右下角位置元素只能是a[m-1][n-1]
初始化:
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}
}; //注意格式
输出二维数组里的内容
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int i,j;
for(i=0; i<3;++i)
{
for(j=0; j<4; j++)
{
printf(" %-5d",a[i][j]); //输出,-表示左对齐,5表示每个数据占5个光标的位置。
}
printf("\n");
}
二维数组的其他操作
对二维数组进行排序;
判断每一行的最大值;
判断矩阵是否对称;
矩阵的相乘;
以上算法自己写或询问度娘
3)多维数组
不存在多维数组
因为内存是线性唯一的
n 维数组可以当作每个元素是n-1维数组的一维数组
比如:
int a[3][4];
该数组是含有3元素的一维数组,且每个元素都可以再分成4个小元素
int a[3][4][5];
该数组是含有3元素的一维数组,且每个元素都可以分成4行5列的二维数组