C语言进阶丨(七)数组的基本概念和初始化【1】

时间:2021-03-05 21:25:00 来源:互联网 作者: 神秘的大神 字体:

数组的基本概念

数组可以说是目前为止讲到的第一个真正意义上存储数据的结构。虽然前面学习的变量也能存储数据,但变量所能存储的数据很有限。不仅如此,数组和指针(后续会讲)是相辅相成的,学习数组可以为学习指针打下基础。

那么到底什么是数组呢?顾名思义数组就是很多数的组合!那么这些数有没有什么要求呢,是不是不管什么数组合在一起都是数组呢?同一数组中存储的数必须满足以下两个条件:

1)这些数的类型必须相同。

2)这些数在内存中必须是连续存储的。

换句话说,数组是在内存中连续存储的具有相同类型的一组数据的集合。它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length),例如int a[4];就定义了一个长度为4的整型数组,名字是a。

数组中的每个元素都有一个序号,这个序号从0开始,而不是从我们熟悉的1开始,称为下标(Index)。使用数组元素时,指明下标即可,形式为:

arrayName[index]

arrayName 为数组名称,index 为下标。例如,a[0] 表示第0个元素,a[3] 表示第3个元素。

数组内存是连续的

数组是一个整体,它的内存是连续的;也就是说,数组元素之间是相互挨着的,彼此之间没有一点点缝隙。下图演示了int a[4];在内存中的存储情形:


 

「数组内存是连续的」这一点很重要,所以我使用了一个大标题来强调。连续的内存为指针操作(通过指针来访问数组元素)和内存处理(整块内存的复制、写入等)提供了便利,这使得数组可以作为缓存(临时存储数据的一块内存)使用。大家暂时可能不理解这句话是什么意思,等后边学了指针和内存自然就明白了。

数组的初始化

对于数组的初始化需要注意以下几点:

1) 可以只给部分元素赋值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:

int a[10]={12, 19, 22 , 993, 344};

表示只给 a[0]~a[4] 5个元素赋值,而后面 5 个元素自动初始化为 0。

当赋值的元素少于数组总体元素的时候,剩余的元素自动初始化为 0:

对于short、int、long,就是整数 0;

对于char,就是字符 '\0';

对于float、double,就是小数 0.0。

我们可以通过下面的形式将数组的所有元素初始化为 0:

int nums[10] = {0};

char str[10] = {0};

float scores[10] = {0.0};

由于剩余的元素会自动初始化为 0,所以只需要给第 0 个元素赋值为 0 即可。

2) 只能给元素逐个赋值,不能给数组整体赋值。例如给 10 个元素全部赋值为 1,只能写作:

int a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};

而不能写作:

int a[10] = 1;

3) 如给全部元素赋值,那么在定义数组时可以不给出数组长度。例如:

int a[] = {1, 2, 3, 4, 5};

等价于

int a[5] = {1, 2, 3, 4, 5};

最后,我们借助数组来输出一个 4×4 的矩阵:

#include<stdio.h>

intmain()

{

inta[4]={20,345,700,22};

intb[4]={56720,9999,20098,2};

intc[4]={233,205,1,6666};

intd[4]={34,0,23,23006783};

printf("%-9d %-9d %-9d %-9d\n",a[0],a[1],a[2],a[3]);

printf("%-9d %-9d %-9d %-9d\n",b[0],b[1],b[2],b[3]);

printf("%-9d %-9d %-9d %-9d\n",c[0],c[1],c[2],c[3]);

printf("%-9d %-9d %-9d %-9d\n",d[0],d[1],d[2],d[3]);

return0;

}

访问数组元素

数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后边。例如:

double salary = balance[9];

上面的语句将把数组中第 10 个元素的值赋给 salary 变量。下面的实例使用了上述的三个概念,即,声明数组、数组赋值、访问数组:

实例

#include <stdio.h> int main (){  int n[ 10 ]; /* n 是一个包含 10 个整数的数组 */  int i,j;

  /* 初始化数组元素 */       

  for ( i = 0; i < 10; i++ )  {      n[ i ] = i + 100; /* 设置元素 i 为 i + 100 */  } 

  /* 输出数组中每个元素的值 */  for (j = 0; j < 10; j++ )  {      printf("Element[%d] = %d\n", j, n[j] );

  }

  return 0;}

当上面的代码被编译和执行时,它会产生下列结果:

 

 C语言中数组详解

在 C 中,数组是非常重要的,我们需要了解更多有关数组的细节。下面列出了 C 程序员必须清楚的一些与数组相关的重要概念:

 

 关于数组的基本认识就分享到这里了,关注小编,每天分享更多精彩内容哦!

最后,特别推荐一个分享C/C++和算法的优质内容,学习交流,技术探讨,面试指导,简历修改...还有超多源码素材等学习资料,零基础的视频等着你!

还没关注的小伙伴,可以长按关注一下: