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

数组的基本概念

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

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

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 程序员必须清楚的一些与数组相关的重要概念:

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

(0)

相关推荐

  • 【连载】(初识一维数组)——乐创DIY C语言讲义——5.1节

    5.1初识一维数组 前面章节中,我们一起学习了一些简单的数据类型,它们包括浮点类型和整数类型两大类.通过使用关键词可以分别定义不同含义的单个变量.比如,小明这次考试的数学成绩是30分,那么我们可以定义 ...

  • C语言中数组的总结

    #目录 # 一维数组的创建和初始化 一维数组的使用 一维数组在内存中的存储 指针的初步介绍 一维数组的指针访问 二维数组的创建和初始化 二维数组的使用 二维数组在内存中的存储 二维数组的指针访问 有关 ...

  • 实验5

    #include <stdio.h> const int N=3; int main() { int a[N] = {1, 2, 3}; int i; printf("通过数组名 ...

  • C语言基础丨运算符之条件运算符(七)

    条件运算符(conditional operator)有时候也称为三元运算符(ternary operator,或者trinary operator),因为它是唯一需要 3 个操作数的运算符,条件表达 ...

  • C语言基础丨运算符之位运算符(六)

    对于更多紧凑的数据,C 程序可以用独立的位或多个组合在一起的位来存储信息.文件访问许可就是一个常见的应用案例.位运算符允许对一个字节或更大的数据单位中独立的位做处理:可以清除.设定,或者倒置任何位或多 ...

  • 苏教版丨七年级下册初中生物知识点总结(可下载)

    为了便于同学们做好中考(会考)复习冲刺,现在整理发布各个版本知识点汇总.建议大家对照相应章节的知识点,自行检查学习情况,促进加强记忆. 第八章:人的生殖和发育 1 1.生殖系统的组成:男性生殖系统由睾 ...

  • SpringBoot进阶教程(七十一)详解Prometheus+Grafana

    随着容器技术的迅速发展,Kubernetes已然成为大家追捧的容器集群管理系统.Prometheus作为生态圈Cloud Native Computing Foundation(简称:CNCF)中的重 ...

  • 期中复盘丨七年级数学期中考试试题 答案,赶快来看看吧!

    初中数学预习 初中数学预习(ID:zksxyx100)是综合评价中心联合玖桔教育传媒集团,整合全国教育资源打造的教育融媒体平台,为学生.家长.教师提供教育资讯.教育活动和全面的教育服务. 公众号 标签 ...

  • C语言基础丨(六)程序结构——分支(选择)结构【2】

    顺序结构的程序虽然能解决计算.输出等问题,但不能做判断再选择.对于要先做判断再选择的问题就要使用分支结构. 分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序.分支结构的程序 ...

  • 你还把Excel当作表格工具?Excel高手进阶的七步法在这

    上学时,老师布置作业,最喜欢要求使用Excel.PPT等格式上交. 工作时,不怕领导布置任务,就怕领导来一句"精通Excel吗""你的数据还要多久才能整理好". ...

  • 苏教版丨七年级下册初中生物知识点总结

    第九章:人的食物来自环境 2 1.人体需要的主要营养物质:供能物质:糖类(主要).蛋白质.脂肪:维生素:水:无机盐和纤维素. 2.钙可以预防佝偻病(维生素D可以促进钙吸收),铁可以预防贫血病,碘可以预 ...

  • 足球训练丨七个适合足球运动员的敏捷梯爆发训练

    " 要成为一名成功的足球运动员,我们必须具有爆发力,足球需要速度.力量.强壮和技术,今天的练习应该是足球运动员训练计划必不可少的一部分,它可以以帮助我们变得更快,更强,更有爆发力,下面我们正 ...