数组的学习与运用
前言
从实践中来定义多个变量时候,反复使用同一个功能时候,需要定义大量变量、需要重复多次写同样的一段语句,这样用数组简化,函数的形式简化操作,节省大量时间。
提示:以下是本篇文章正文内容,下面案例可供参考
一、数组是什么?
数组是一组相同类型数据的集合
二、使用步骤
1.一维数组的创建
基本语法
首先我们需要知道数组创建的基本语法
type_表示的是数组的类型,如果数组里是字符,那么就采用‘char’;如果数组内存储的类型是整数数字,那么就采用‘int’,依此类推。
arr_name指的是数组名字的创建,不唯一,可以随意定义数组名字。例如:str srr arr......
唯一要记住的是不可以随意取名int,char之类的奇怪名字。
[const_n]是一个常量表达式,用来定义数组的大小。
在明白了基本的语法之后,我们要讲到数组的创建了,小白的话好好看下面内容
如果我们需要的是整形的数组,数组内有10个元组,代码如下
int arr[10];
如果是数组内放字符,或者浮点数:
char arr[10];
double arr[10];
这里我们讲一个特例,在c99中引入了变长数组的概念,变长数组支持数组的大小由变量来决定,但是并不是说数组的长度可以改变,而是说数组的大小,可以由变量来决定!!
例如:
int n=0;
scanf("%d",&n);
int arr[n];
注意只有在支持c99的编译器之下运行才能实现,在vs2019或者2022中会报错,但是在牛客等刷题网站中可以使用,经常有同学在此处迷惑,故笔者在此赘述。
数组的初始化
例子如下
int arr[10]={1};
1:此处称为不完全初始化,只会初始化数组第一个值,其他都是默认为0,我们可以通过监视来观察一下
2:完全初始化: 如果完全初始化也是可以的,类似如下代码:
int arr[10]={1,2,3,4,5,6,7,8,9,10};
** **此时数组的每一个值都被初始化,我们来看窗口监视
字符类型也是一样,不做类举。
3:还有一种方式可以创建数组,不多bb,来看代码:
int arr[]={1,2,3,4};
此时是由后面的值,来确定数组的大小,很明显,此处数组的大小是4。
错误示范:char arr[]="";此处“”内为空,系统默认一个值为\0,所以arr的大小只能是1;
2:数组的使用
1).数组的下标
数组的下标是从0开始的,往后依次类推
我们可以使用arr[n]来访问数组的下标对应的值,比如如上的代码中arr[4]代表数字5,arr[8]代表数字9.......
因此,当我们需要访问数组内每一个值的时候,只需要求出每一个下标即可。
例如,我们要打印数组内每一个值:
int main()
{
int i=0;
for(i=0;i<10;i++)
{
printf("%d",arr[i]);
}
return 0;
是不是悟到了
数组大小的计算:
int sz = sizeof(arr)/sizeof(arr[0]);
总结
1. 数组是使用下标来访问的,下标是从0开始
2. 数组的大小可以通过计算得到。
二维数组的创建和内存存放
有时候我们创建数组的同时需要要求数组几行几列,这时候我们的数组就同时拥有了两个维度的量,此时我们称之为二维数组,创建方法如下:
图中第一行,口语表示:整形数组,三行四列,从左往右,从上往下的数字分别是1,2,3,4,5
空余的全部默认为0;例如下面:(画的有点丑,不要介意)
图中第二行的意思是一样的不过在初始化数组的时候,第一行前两个数为1,2.。第二行前两个数为3,4.第三行第一个数为5,其余都是0,例子如下:
二位数组初始化时,可以省略行,不可以省略列
例如:int arr[][4]={1,2,3,4,5}; 可行
int arr[3][]={1,2,3,4,5} 不可行
二维数组不仅行有下标,列也有 分别从上往下,从小到大从0递增
二维数组在内存的存放也是连续存放的如上图,因此我们可以理解到,为什么可以省略行,但不可以省略列,因为二维数组在内存条上也是连续存放的,我们需要确定哪个地方停下
数组越界
数组的下标是有范围限制的。
数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。
所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就 是正确的, 所以程序员写代码时,最好自己做越界的检查。
二维数组的越界访问会使数组变的紊乱!!!!
总结
以上就是今天的所有讲解啦,希望能对各位小伙伴起到帮助,感谢各位的支持!!!!
如果有错误欢迎指正!!!
如果没看懂私信解答!!!
下一章将会讲到冒泡排序,要了解的小伙伴三连支持一下
版权归原作者 乐言.. 所有, 如有侵权,请联系我们删除。