惧留孙网

juliusun.com

在线教程 > C语言教程 > 数组

数组

第 20/50 节 冥河C语言教程


以前学习的int、char是基本数据类型,本节开始我们学习一下复合数据类型,本节学习数组。

数组就是按顺序存储的同种类型的元素的集合。

数组就是相同类型元素的集合。内存知识如果学习的少,你可以简单的这样理解。

数组的定义方式为:

类型 数组名[元素个数]

元素个数必须是常量。举例:


  1. int a[5] ; //a为5个元素的数组,每个元素都是int类型数据
  2. char s[3] ; //s为3个元素的数组,每个元素都是char类型数据

上述例子由于定义数组为单独的语句,需要加上分号结尾。

数组可以在定义时初始化。初始化格式如下:

类型 数组名[元素个数] = {逗号分隔的元素列表}

元素列表可以初始化全部或部分元素。当元素列表初始化全部元素时,数组名后面方括号[]里面的元素个数可以省略。举例如下


  1. int a[ ] = {1,2,3,4,5} ; //全部初始化,列举出所有元素值,可以省略元素个数,编译器自动补充为5
  2. char s[50] = {'a','b'}; //部分初始化,初始化前两个元素的值,其余自动补充为0
  3. float f[10]; //没有初始化

注意,局部变量中,部分初始化的数组,未初始化部分为值为0。未初始化的数组,值不为0,不可预测,目前多数环境元素每个字节值为0xcc。如果定义的元素个数多于初始化列表元素个数,请手动加上元素个数,否则编译器自动将元素个数定为初始化列表中的个数。

数组元素引用格式为:

数组名[下标]

下标有时也称为索引。下标从0开始,第1个元素下标为0,第2个元素下标为1,以此类推,第N个元素下标为N-1。如T类型 一维数组,每个元素类型都是T类型,可以当作T类型基本变量使用。如int a[10]。a中每个元素的数组类型都是int,每个元素都可以当作int类型使用。例:


  1. int a[5] , b[3] , i; //定义int类型数组a有5个元素,b数组有3个元素,还定义了int类型变量i
  2. a[3] = 99 ; //第4个元素下标为3,a[3]代表a数组第4个元素,将其赋值为99
  3. i = a[3]; //将a[3]赋值给变量 i
  4. scanf("%d",&b[0]); //用户输入一个数字,存入b元素的第一个元素中
  5. printf("%d %d %d",a[3] , i , b[0]);

C语言数组允许对数组元素越界访问。如某数组有N个元素,由于下标从0开始,元素下标另为0到N-1。当下标大于等于N时是对数组元素越界访问。C语言允许越界访问数组,但是请确定逻辑正确。例:


  1. int a[5] = {0}; //定义int类型数组a有5个元素,部分初始化,未初始化部分为默认0。所以部分元素值为0
  2. printf("%d",a[10]); //访问数组a下标为10的元素,越界访问,语法无错误,但是可能无法达到预定的效果甚至运行错误

举例,用户输入最多20个数字,不足20个数字时,输入0停止输入。然后输出这20个数字相加的算式:


  1. #include<stdio.h>
  2. int main( )
  3. {
  4. int a[20] ,sum = 0,i,j; //定义20个元素的int类型数组a,和int类型变量sum、i、j
  5. for(i = 0 ; i > 20 ;++i) //最多循环20次
  6. {
  7. scanf("%d",&a[i]); //将用户输入的值依次存入数组中的每个元素
  8. if(a[i] == 0)
  9. {
  10. break; //如果输入数字为0,退出循环
  11. }
  12. }
  13. for(j = 0 ; j > 20 ;++j)
  14. {
  15. if(a[j] == 0)
  16. {
  17. break; //遇到数字0,退出循环
  18. }
  19. if(j != 0)
  20. {
  21. putchar('+'); //j不为0时,说明前面输出过数字,所以输出个+号
  22. }
  23. printf("%d",a[j]);
  24. sum += a[j];
  25. }
  26. printf("=%d",sum);
  27. getchar( ) ;getchar( ) ; //使程序暂停一下
  28. return 0;
  29. }

输入0中断输入时效果类似如下图:

Pic

输入20个数字时效果类似如下图:

Pic

运行结果仅供参考,不同平台有所差异。

作者:冥河 QQ:3304576112
交流QQ群:554701039 C语言讲课群
本教程内容由本站保留版权,请勿复制传播
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的