7.1:定义
*为什么需要数组?
1:为了模拟现实世界
2:为了解决大量同类型数据的存储和使用问题
3:数组通常被用来存储程序需要的数据
*要访问数组中的元素:通过使用数组下标数(也称为索引)表示数组中的各元素
7.2:分类
7.2.1:一维数组
怎样定义一维数组?
-为n个变量连续分配存储空间
-所有的变量数据类型必须相同
-所有变量所占的字节大小必须相等
例子:int a[5] //int是数据类型,a是数组名,5是下标
有关一维数组的操作
(1)初始化
① 完全初始化
int a[5] = {1,2,3,4,5};
②不完全初始化:未被初始化的元素自动为零
int a[5] = {1,2,3};
③不初始化:所有元素都是垃圾值
int a[5];
④清零
int a[5] = {0};
⑤如果初始化数组时省略方括号中的数字,编译器会初始化列表中的项数来确定数组的大小
/*
时间:2022年10月17日14:01:23
目的:使用数组求每个月的天数
*/
#include<stdio.h>
int main(void) {
const int days[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
//如果初始化数组时省略方括号中的数字,编译器会根据初始化列表中项数来确定数组的大小
//将数组设置为只读(程序只能从数组中检索值,不能把新值写入数组)
//要创建只读数组,应该用const声明和初始化数组
int index;
for (index = 0; index < sizeof days; index++)
//sizeof运算符给出它的运算对象的大小(以字节为单位)
printf("Month %2d has day %2d\n days.", index + 1, days[index]);
return 0;
}
/*
时间:2022年3月23日11:40:13
目的:数组的用法
*/
#include<stdio.h>
int main(void)
{
int a[5] = { 1,2,3,4,5 };
//a是数组的名字,5表示数组元素的个数,并且这5个元素分别用a[0],a[1],...,a[4]表示
int i;
for (i = 0; i < 5; ++i)
printf("%d\n",a[i]);
return 0;
}
/*
在vs2019中的输出结果
~~~~~~~~~~~
1
2
3
4
5
~~~~~~~~~~~
*/
/*
时间:2022年4月1日13:56:34
目的:确定一个一维数组需要几个参数
*/
#include<stdio.h>
//f函数可以输出任何一个一维数组的内容
void f(int * pArr,int len) //pArr首地址,len长度
{
int i;
for (i = 0; i < len; ++i)
printf(" %d ", *(pArr+i)); //*(pArr+i)等价于 pArr[i],也等价于 b[i],也等价于 *(b+i);
printf("\n");
}
int main(void)
{
int a[5] = { 1,2,3,4,5 };
int b[6] = { 1,2,3,4,5,6 };
int c[100] = { 22,31,20,10 };
f(a,5); //a是int *
f(b,6);
f(c,4);
printf(" %d\n ",c[2]);
return 0;
}
/*
在vs2019中的输出结果
~~~~~~~~~~~~~~~~~~~~~~~~~
1 2 3 4 5
1 2 3 4 5 6
22 31 20 10
20
~~~~~~~~~~~~~~~~~~~~~~~~~
总结:指针可以快速传递数据
*/
/*
时间:2022年4月5日09:13:08
目的:动态一维数组的使用
*/
#include<stdio.h>
#include<malloc.h>
int main(void)
{
int a[5]; //如果int占四个字节的话,则本数组总共包含20个字节,每四个字节被当做一个int变量来使用
int len;
int* pArr;
int i;
//动态的构造一维数组
printf("请输入你要存放的元素的个数:");
scanf_s("%d", &len);
pArr = (int*)malloc(4 * len); //本行动态的构造了一个一维数组,该数组的数组名是pArr,每个元素是int类型;类似于:int pArr[len];
//对一维数组进行操作
//对动态一维数组进行赋值
for (i = 0; i < len; ++i)
scanf_s("%d", &pArr[i]);
//对一维数组进行输出
printf("一维数组的内容是:\n");
for (i = 0; i < len; ++i)
printf("%d\n", pArr[i]);
free(pArr); //释放掉动态分配的数组
return 0;
}
/*
在vs2019中的输出结果
~~~~~~~~~~~~~~~~~~~~
请输入你要存放的元素的个数:5
20 31 10 30 24
一维数组的内容是:
20
31
10
30
24
~~~~~~~~~~~~~~~~~~~~
总结:。。。
*/
error writing
int a[5] = {1,2,3,4,5};
int b[5];
如果要把a数组中值全部赋值给b数组
错误的写法
b = a; //error
正确的写法
for (i=0;i<5;++i)
b[i] = a[i];
(2)赋值
(3)排序
(4)求最大、最小值
(5)倒置
(6)查找
(7)插入
(8)删除
7.2.2:二维数组
int a[3][4];
总共是12个元素,可以当做3行4列看待
/*
时间:2022年3月24日09:07:17
目的:对二维数组的应用
*/
#include<stdio.h>
int main(void)
{
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");
}
return 0;
}
/*
在vs2019中的输出结果
~~~~~~~~~~~~~~~~~~~~~~~
1 2 3 4
5 6 7 8
9 10 11 12
~~~~~~~~~~~~~~~~~~~~~~~
总结:。。。
*/
7.2.3:多维数组(不存在,因为内存是线性一维的;n维数组可以当做每个元素是(n-1)维数组的一维数组)
eg:
int a[3][4];
该数组是含有三个元素的一维数组,只不过每个元素都可以再分成4个小元素
Int a[3][4][5];
该数组是含有三个元素的一维数组,只不过每个元素都是4行5列的二维数组