一维数组的定义方式:

数据类型 数组名[整型常量表达式]

注意:方括号中只能是常量表达式,不能使用变量。常量表达式的值表示数组最多能存放的元素的个数,也称为数组的大小

数组所占总字节数=sizeof(数据类型)*数组大小

int k=5;float c[k];  不合法,k是变量

#define M 20

int num[M];  //合法,M是编译预处理命令define定义的符号常量

&数组名[下标]代表元素在内存中的地址。

ch[2.5+2.5]    //非法,下标只能是整型表达式

ch[10-10]  //合法,相当于ch[0]

一维数组的初始化

变量的初始化就是定义变量的同时赋初值,一维数组初始化有以下几种

(1)char a[5]={'h','e','l','l'};

(2)int a[6]={1,2,3};

(3)int a[]={1,2,3}  //在定义时[]中的值不能为空,只有当用初始值进行初始化时,才可省略,利用初始值的个数作为数组的大小。

二维数组

定义:类型说明符 数组名[整型常量表达式][整型常量表达式];    //int a[3][4];

二维数组的引用

类似于一维数组元素的引用方式,二维数组元素的引用方式也是 “数组名[下标]”。其区别是,二维数组是“有行有列”,因此比一维数组多一个下标,即 数组名[下标][下标]

例如“int a[3][4];定义一个具有3行4列的整型数组a,数组可以存放12个整数。可以将数组a看成是由3个一维数组组成的,每个一维数组中又含有4个元素。这3个一维数组的名称是a[0]、a[1]和 a[2],第一个数组a[0]的各元素为a[O][O]、a[0][1]、 a[0][2]、a[O[3];第二个数组、第三个数组以此类推。数组a各成员变量如下:

a[0][0],a[0][1], a[0][2], a[0][3]

a[l][0],   a[1][1],  a[1][2],   a[1][3]

a[2][0],a[2][1], a[2] [2],  a[2][3]

在内存中二维数组是否也是这样“有行有列”存放吗?答案是否定的。计算机内存没有什么所谓的“行”与“列”,都是以字节为单位的连续空间。二维数组在内存存放时,采用“逐行存放”,行是“从上到下”,每一行是“从左至右”。例如,上例中的数组a[3][4]在内存存放元素的顺序是: a[O][0]→a[0][1]→a[0][2]- a[0][3]→a[1][0]-._ a[2][2]-a[2][3]。

二维数组的初始化

二维数组初始化有以下几种方法

(1)int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

(2)int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

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

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

(5)int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};   //只能省略行数,不能省略列数,原因在于二维数组是按行进行存放的,省略列数就无法控制何时转入下一行。

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

字符串与字符数组

字符串存放内存时,除了将其中的每个字符存入内存外,还要在最后加一个“\0”字符存入内存,“\0”也是字符串结束标志。定义用于存放字符串的字符数组时,数组的大小应该字符串的长度+1。

1、用一维数组存放一个字符串

(1)char a[4]={'a','b','c','d'};//一维字符数组

(2)char a[5]={'a','b','c','d','\0'};   //存放了字符串abcd

(3)char a[5]={"abcd"}    //双引号是字符串常量的标志

(4)char a[5]="abcd"   //与(3)等价

(5)char a[]="abcd" ;  //有初始值来确定数组的大小

(6)char a[]={'a','b','c','d'};

2、用二维数组存放多个字符串

char s[3][10]={"456","ab","M"};  //表示二维数组最多可以存放三个字符串,每个串的长度最大为9,留一个存放‘\0’

字符串的输入输出

1、字符串的输出

字符串的输出可以使用printf()和puts()

1)printf()函数

(1)按%c的格式,利用循环控制语句将字符串中的字符逐个输出到屏幕

#include

void main()

{

int i;

char str[6]={'w','o','r','l','d','\0'};

for(i=0;i<6;i++)

printf("%c",str[i]); //world

}

(2)按%s的格式,用printf()将数组的内容输出到屏幕,直到遇到‘\0’为止。

#include

void main()

{

char str1[5]={'w','o','r','l','d'};

char str2[6]={'w','o','r','l','d','\0'};

char str3[]="world";

printf("str1:%s\n",str1);

printf("str2:%s\n",str2);

printf("str3:%s\n",str3);

}

分析:从程序中可以看出利用printf()函数使用%s格式进行输出字符数组时,输出列表中使用的是“数组名”。输出字符数组str1时,显示的结果中最后出现了一些随机字符,原因在于数组str1初始化时没有结束标志\0,因此输出时会把超出数组范围的内存中随机的字符输出,直到遇到机内的"0'为止,这显然不是我们所期望的。而数组str2和str3在初始化时都是按照字符串的格式进行初始化的,因此输出结果是正常的。

因此,prinf函数采用%s的格式常用于输出字符串,输出内容处只需书写“数组名”即可,但要注意数组中存放的是否是字符串。

2) puts函数

puts函数也可实现输出字符串,并且自动将字符串的结束标"\0转换成回车换行符。

#include

void main()

{

char str1[5]={'w','o','r','l','d'};

char str2[6]={'w','o','r','l','d','\0'};

char str3[]="world";

puts(str1);

puts(str2);

puts(str3);

}

2、字符串的输入

字符串的输入可以使用scanf和gets函数实现。

1)scanf函数

(1)按%c的格式,利用循环控制语句

#include

void main()

{

int i;

char str[6];

for(i=0;i<5;i++)

scanf("%c",&str[i]);

str[5]='\0';

puts(str);

}

(2)按%s的格式,将猪粉草的内容输入到字符数组,当输入的字符是“空格”“Tab”或回车键,系统默认输入结束。

#include

void main()

{

char str1[7];

char str2[7];

printf("input str1:");

scanf("%s",str1);

printf("input str2:");

scanf("%s",str2);

printf("str1:%s\n",str1);

printf("str2:%s\n",str2);

}

2)gets函数

可以实现输入字符串到字符数组中,当遇到回车键时,系统默认用户输入结束

#include

void main()

{

char str1[7];

char str2[7];

printf("input str1:");

gets(str1);

printf("input str2:");

gets(str2);

printf("str1:%s\n",str1);

printf("str2:%s\n",str2);

}

字符串处理函数

使用前要包含对应的头文件string.h

strlen(字符数组)——测字符串长度

功能:计算机指定字符串的实际长度(不含字符串结束\0),并返回字符串的长度。

strcat(字符数组1,字符数组2)

功能:将字符数组2中存放的猪粉草连接到字符数组1中存放的字符串尾部,同时删去字符串1的结束标志\0,组成新的字符串,存入字符数组1中。该函数返回的是字符串1的首地址。

strcmp(字符数组)

功能:安装从左到右的顺序依次比较字符数组1和字符数组2对应位置字符ASCII码值,并返回比较结果,

字符串1=字符串2,返回0

字符串1>字符串2,返回大于0的数

字符串1

strcpy(字符数组1,字符数组2)

功能:把字符数组2中的字符复制到字符数组1中,结束标志也复制进去。

注意;复制后原有的字符串将被覆盖。

执行下面的程序时,如果输入A,则输出结果是A123

#include

#include

void main()

{

char ss[10]="1,2,3,4,5";

gets(ss);

strcat(ss,"123");

printf("%s\n",ss);

}

数组c语言什么时候学的,C语言学习之数组相关推荐

  1. 语言都是相通的,学好一门语言,再学第二门语言就很简单,记录一下我复习c语言的过程。...

    语言都是相通的,学好一门语言,再学第二门语言就很简单,记录一下我复习c语言的过程. 为了将本人的python培训提高一个层次,本人最近买了很多算法的书. 这个书上的代码基本都是c语言实现的,c语言很久 ...

  2. 中南民族大学c语言报告,中南民族大学信C语言实验报告.doc

    中南民族大学信C语言实验报告 中南民族大学管理学院 学生实验报告 课程名称: C语言程序设计 姓 名:微博@song-style是坏学长 学 号: 年 级: 2011 专 业:信息管理与信息系统 指导 ...

  3. 中南民族大学c语言报告,中南民族大学计算机C语言试题10套.doc

    中南民族大学计算机C语言试题10套.doc 1一.判断 共10题 (共计10分)第1题 ( 1.0分) 题号1488函数即可以嵌套定义,又可以嵌套调用.答案N第2题 ( 1.0分) 题号1256uns ...

  4. 程序员入门c语言还是java,先学java还是c语言?入门学哪种语言?

    很多刚接触编程语言的小伙伴都会有一个疑问先学 Java 还是 C 语言?今天 W3Cschool 小编就来和大家简单介绍一些,做个对比相信小伙伴们能够自行作出适合自己的判断. 在探讨先学 Java 还 ...

  5. cs架构用什么语言开发_学了C语言,能开发什么项目?

    直至今天还有人在喊着C语言都过时的语言了,还有什么值得去学的,看现在的python,JAVA等语言现在用起来多简单,谁还去学习老掉牙的C语言,事实真的是这样的吗?小编作为专门下载了这两种语言的底层源码 ...

  6. 两个数组结果相减_学点算法(三)——数组归并排序

    今天来学习归并排序算法. 分而治之 归并算法的核心思想是分而治之,就是将大问题转化为小问题,在解决小问题的基础上,再去解决大问题.将这句话套用到排序中,就是将一个大的待排序区间分为小的待排序区间,对小 ...

  7. c语言编程难学么,C语言编程学习难吗?

    c语言编程难懂,本人觉得是被中国人乱传或误教引发. 一直以来,高等院校理工科专业都设立了c语言编程,学员糊里糊涂刚开始学习培训. 不在清晰学习培训目地.需要前提条件专业知识的状况下,仅学习培训些基本英 ...

  8. java中数组的返回值是什么类型_java基础学习:数组的常用操作与基础二维数组用法、及基本数据类型和引用数据类型赋值的区别...

    一.Arrays jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作.例如快速输出.排序.查找等. 1.数组的常用方法 1.数组以字符串形式的输出,2.sort对数组排序 ...

  9. 分奇偶数c语言_小白学写字(C语言)

    小白学写字 #输入输出语句应用 1.用printf语句编写计算器.样例: 程序如下: #include void main() { printf("*****计算器*****\n" ...

最新文章

  1. ComplexHeatmap绘制热图(一)
  2. Java学习_day008面向对象(OOP):对象和类
  3. 京东自动评论脚本_安卓自动脚本,京东活动,抖音极速版刷视频
  4. Windows Phone 7.1 Sensor プログラミング基礎
  5. 抢坐公司网盘首位,谁才是最大蛋糕受益者?
  6. android 内部拦截,如何使用proxy,如何在内部拦截get方法
  7. 第6章 Python 数字图像处理(DIP) - 彩色图像处理3 -色彩变换、彩色校正、彩色图像平滑和锐化、HSI彩色空间中的分割、RGB空间中的分割、彩色边缘检测
  8. 一些关于爱情的心理学事实
  9. Openwrt笔记-1-校园网连接
  10. 几行Python代码打造自己的磁盘垃圾文件清理器
  11. 腾讯云数据库三大产品线统一升级为TDSQL,这是要集中力量干大事! ​
  12. 可以储存照片的字段类型是_在sql server中,储存图片的数据类型是什么呀?
  13. c++多态与java多态性_Java中的多态性
  14. 虚控件在GUI编程中的应用
  15. GD32F103使用串口DMA收+发 信息(无中断)
  16. luajit lua文件加密工具
  17. 使用kubeadm快速部署一套K8S集群
  18. [乐意黎原创] 最高学历与最高学位
  19. 第三课:创建BootRom引导镜像
  20. GPRS模块中AT指令发送短信的PDU编码规则

热门文章

  1. 配置zabbix及安装agent
  2. Swift编码总结8
  3. 在github上搭建hexo博客
  4. 【linux】ubuntu下crontab无效解决方法
  5. Nginx 的 Location 配置指令块
  6. 垂直型电商的投资魔法
  7. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
  8. 2018-04-13web自动化学习心得(1)
  9. Vue 学习笔记 — css属性计算的问题
  10. 安装Was liberty之步骤