数组定义:相同数据类型的变量按一定顺序排列的集合;给这个集合起的名字就叫做数组名;每一个变量都有一个编号,称下标;组成数组的每个变量也称为该数组的元素

 

关于“数组是否为一种数据类型”?(此问题答案于网上查询所得)

1、构造类型:

a、从类型的定义上进行解释:每一个构造体(即组成该类型的抽象值集中的每一个抽象值)都是由若干属于某一数据类型的数据按一定规则所组成。

b、从数据结构角度进行解释:构造体的数据结构中的每一个节点(数据元素)都是一个属于某种数据类型的数据。

c、综上,构造体从数据类型角度分析,它是一种数据类型(一个值集+一个操作集),并且该类型是由若干属于某一数据类型的数据构造而成。

d、误区:构造类型并不是由某些“类型”构造而成,而是由某些“类型数据”构造而成。

2、数组是一种构造体,所以从类型角度看,数组当然是一种类型(事实上也如此,数组的确是中、高级语言中的一种重要的数据类型)。


一维数组

一维数组是最简单的数组,其逻辑结构是线性表

定义:类型+数组名[数组大小(常量表达式:常量和符号常量)],描述一组相同的数据类型(在定义数组时,一定要指定数组元素的个数

      数组内存:所有成员之和,内存是连续的

      初始化:数组名[]={};

      数组元素的访问:数组名[下标:0-数组大小-1]

      数组越界:下标超出了范围

      小玩意”:sizeof可用于求得数组的长度。

           数组长度 = sizeof(数组名)/sizeof(数组元素类型)

      注意:一维数组名就是首地址(首地址:数组第一个元素的地址)

二维数组

定义:类型+数组名[维数1:行][维数2:列]

     内存:连续存储,按行存储,把二维数组的每一行看成一维数组

     初始化:数组名[]={{},{},{}};

             1.可以只对部分元素赋初值,未赋初值的元素自动取0值。

             2.如对全部元素赋初值,则第一维的长度可以不给出。

     数组元素的访问:数组名[下标:0-行大小-1] [下标:0-列大小-1]

     数组的遍历

     注意:必须指定二维的长度(即指定“列”的值),否则编译不通过

字符数组

定义:用来存放字符数据的数组,每一个元素存放一个字符

      由于字符型与整型是相互通用的,也可以定义一个整型数组来存放字符数据

      一维数组用字符串常量来初始化

      字符串常量有自己独立的内存,只是把内存的字符拷贝到数组

      字符串结束标志符:‘\0’, 为了测量字符串的实际长度,占一个字节

      char c[10]="ab\0cd";  //字符串里面以\0结尾

      两种输入输出方式:用格式符“%c”输入输出一个字符

                用格式符“%s”输入输出整个字符串,即对字符串(string)的输入输出

      字符串处理函数

      puts函数:puts(字符数组) 将一个字符串(以'\0'结束的字符序列)输出到终端

                 puts函数输出的字符串可以包含转义字符

      gets函数:gets(字符数组) 将一个字符串从终端输入到字符数组,并且得到一个函    数值(一般用gets函数的目的是向字符数组输入一个字符串,而不太关心其函数值)

                 :puts函数和gets函数只能输入输出一个字符串

      strcat函数:字符串连接函数  strcat(字符数组1,字符数组2)

                  将字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值----字符数组1的地址

      strcpy函数:字符串复制函数 strcpy(字符数组1,字符数组2)

                  将字符串2复制到字符数组1中

                 :不能用赋值语句将字符常量或字符数组直接给一个字符数组

      strncpy函数:strncpy(字符数组1,字符数组2,常量n)

                   将字符数组2中最前面n个字符复制到字符数组1中,取代字符数组1中最前面n个字符

      strcmp函数:字符串比较函数 strcmp(字符串1,字符串2)

                   对两个字符串从左到右逐个字符相比(按照ASCII码值大小比较)

                   :英文字母位置靠后的大些,小写字母>大些字母

                   返回值为一个正数,负数,0

      strlen函数:测量字符串长度的函数 strlen(字符数组)

                   函数的值为字符串的实际长度(不包含‘\0’)

                   sizeof和strlen的区别

                      sizeof:求数据类型的大小

                      strlen:求字符串的长度(不包括“\0”)

      strlwr函数:将字符串中大的写字母换成小写字母  strlwr(字符串)

      strupr函数:将字符串中的小写字母换成大写字母  strupr (字符串)

数组使用规则

1.数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。

 

2.数组名的书写规则应符合标识符的书写规定。

 

3.数组名不能与其它变量名相同。

 

4.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

 

5.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static inta[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;(请注意:在C语言中是这样,但并非在所有涉及数组的地方都这样)

 

6.如不给可初始化的数组赋初值,则全部元素均为0值。

 

7.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static inta[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。