1 数组
数组是一组数据的集合,它包含的每个数据叫做数组元素,包含的数据个数称为数组长度。我们可以用数组的格式来表达下他的含义,数组格式:类型 + 数组名 + [常量表达式]。这里的常量表达式可以是常量及常量表达式,在linux环境下不能为变量,且长度最小为1。
数组中我们需要注意的是:数组中的每个元素的数据类型必须相同;数组的长度是固定的,注意数组下标越界问题(这里说到下标,提一下下标序号从0开始,而不是从我们熟悉的1开始)。
数组在赋初值的时候,有两点需要提醒:(1)只能在初始定义时才能赋初值;(2)中途赋初值只能对元素进行输入输出,不能对整个数组进行操作。
给数组赋初值分为全部赋初值和部分赋初值。当我们给一个数组全部元素赋初值的时候,这个数组的长度可以不用写明。例如:int a[4] = {1,2,3,4} 同int a[] = {1,2,3,4}。第二种情况是我们给一个数组部分元素赋初值时,我们从前往后依次给数组中的元素赋初值,剩下的元素是未赋初值部分,我们给他们赋初值{0}。(未赋初值部分需要根据类型来赋值,如:short、long类型要赋值’0’;char类型要赋值’\0’;float、double类型要赋值’0.0’)此外,我们可以通过例如int a[10] = {0}的形式,给整个数组的元素全部赋初值{0}。
数组的使用如逆序和冒泡排序,我会在下面的几篇博客中写出具体程序出来,供大家参考,这里就不具体说明了。
2 二维数组
二维数组的格式是:数据类型 + 数组名 + [常量表达式1] [常量表达式2]。我们可以结合一维数组简单点理解,可以看作是由一维数组嵌套而成的。二维数组是一个一维数组,在一维数组中的每个元素是一个一维数组。
二维数组在概念上是二维的,但在内存中地址是连续的,也就是说各个元素是相互挨着的。我们可以通过画表格来形象描述它。
二维数组的一些要求,特点与一维数组大同小异。
在一维数组中,我在赋初值的环节给出的两点提醒同样对二维数组有效。我们只需要在全部赋值和部分赋值上做点改变。我们对二维数组全部元素赋初值时,第一维的{}可以省去,不会影响数组的意思(比如:int a[3][2]={{1,2},{2,3},{4,5}}同等于int a[3][2]={1,2,2,3,4,5})。并且第一维的长度也可以不给出,比如inta[][2]={1,2,2,3,4,5}。
当我们只对部分元素赋初值时,未赋初值的元素自动取’0’值,如int a [3][3]={{0,1},{0,0,2},{3}},赋值后的元素值为:
0 1 0
0 0 2
3 0 0
3 字符数组和字符串
字符数组是多个字符的集合,就是说一个字符数组存放一串字符串。因此,我们可以直接将字符串赋值给字符数组。
字符数组的一般格式为 char + 数组名 + [常量表达式]。一般我们可以这么写更简洁:char str[]=”hello!”。
在字符数组中,我们要注意几点:
(1) 在C语言中,字符串总是以’\0’作为串的结束符。我们要记住,只有遇到’\0’才能结束。上面的字符串,已经自动在末尾添加了’\0’。
(2) 字符串给字符数组赋值时,由于要添加结束符‘\0’,数组的长度要比字符串的长度(字符串长度不包括‘\0’)大1。上面的字符串长度为6,而字符数组的长度为7。
接下来,我需要具体讲下str相关字符串函数。
除了printf、puts、scanf、gets等,头文件是stdio.h,当我们使用str相关字符串函数时,头文件要加上string.h。
(1)strlen函数
strlen表示字符串长度,用来计算字符串的长度,同样直到遇到字符串结束标志‘\0’才能结束。
(2)strcat函数
strcat语法格式为 strcat(字符串1,字符串2),表示将字符串1和字符串2合二为一放到字符串1的数组中。注意:数组1的长度要同时足够容纳字符串1和2,否则会出现越界问题。
(3)strcpy函数
strcpy语法格式为 strcpy(字符串1,字符串2),表示将字符串2的元素复制到字符串1中。同样需要注意,数组1的长度要同时足够容纳字符串1和2,否则会出现越界问题。
(4)strcmp函数
stycmp语法格式是strcmp(字符串1,字符串2),表示字符串1和字符串2进行比较,输出结果。若字符串1和字符串2相同,则返回0;若字符串1大于字符串2,则返回1;若字符串1小于字符串2,则返回-1。
暂时我们可以先了解上面4个str相关字符串函数,感兴趣的可以去上网查找更多的相关字符串函数。
4 字符串的输入与输出
我在上一篇博客中有介绍过printf函数,同样字符串的输出我们也可以用printf函数进行输出。一般格式为:printf(”%s\n”,str)。此外,在字符串的输出方式中,我们也可以用puts函数直接输出字符串。这里要注意puts函数只能输出字符串。一般格式为:puts(str)。
同样,我们在字符串的输入中也有两个函数,除了之前提过的scanf函数外,还有gets函数。其中gets函数直接输入字符串,并且只能输入字符串。
注意:scanf函数会被空格截断。对比于gets函数不会,他只会被回车截断。