C语言的数组总结


一、一维数组

1、一维数组的定义

一维数组用以存储一维数列中数据的集合。其一般形式如下:

类型说明符 数组标识符[常量表达式];
  • 类型说明符表示数组中所有元素的类型。
  • 数组标识符表示该数组型变量的名称,命名规则与变量名一致。
  • 常量表达式定义了数组中存放的数据元素的个数,即数组长度。例如 iArray[5],5表示数组中有5个元素,下标从0开始,到4结束。

例如,定义一个数组:

int iArray[5];

代码中的int为数组元素的类型,而iArray表示的是数组变量名,括号中的5表示的是数组中包含的元素个数。

注意:
在数组iArray[5]中只能使用iArray[0]、iArray[1]、iArray[2]、iArray[3]、iArray[4],而不能使用iArray[5]。若使用iArray[5],则会出现下标越界的错误。

2. 一维数组的引用

数组元素的一般表示形式如下:

数组标识符[下标]

例如,引用一个数组变量iArray中的第3个变量:

iArray[2];

iArray是数组变量的名称,2为数组的下标

为什么引用第3个数组元素使用的数组下标是2呢?
因为数组的下标是从0开始的,也就是说下标为2表示的是第3个数组元素。

3. 一维数组初始化

对一维数组的初始化,可以用以下3种方法实现。
**(1)在定义数组时直接对数组元素赋初值。**例如:

int i,iArray[6]={1,2,3,4,5,6};

该方法是将数组中的元素值一次放在一对花括号中。经过上面的定义和初始化之后,数组中的元素iArray[0]=1,iArray[1]=2,iArray[2]=3,iArray[3]=4,iArray[4]=5,iArray[5]=6。

2)只给一部分元素赋值,未赋值的部分元素值为0。
第二种为数组初始化的方式是对其中一部分元素进行赋值,例如:

int iArray[6]={0,1,2};

数组变量iArray包含6个元素,不过在初始化时只给出了3个值。于是数组中前
3个元素的值对应括号中给出的值,在数组中没有得到值的元素被默认赋值为0
(3)在对全部数组元素赋初值时可以不指定数组长度。
之前在定义数组时,都在数组变量后指定了数组的元素个数。C语言还允许在定
义数组时不必指定长度,例如:

int iArray[]={1,2,3,4};

上述代码的大括号中有4个元素,系统就会根据给定的初始化元素值的个数来定
义数组的长度,因此该数组变量的长度为4。

注意
如果在定义数组时加入定义的长度为10,就不能使用省略数组长度的定义方
式,而必须写成:int iArray[10]={1,2,3,4};

二、二维数组

1. 二维数组的定义

二维数组的声明与一维数组相同,一般形式如下:

数据类型 数组名[常量表达式1][常量表达式2];

其中,“常量表达式1”被称为行下标,“常量表达式2”被称为列下标。如果
有二维数组array[n][m],则二维数组的下标取值范围如下:

  • 行下标的取值范围为0~n-1。
  • 列下标的取值范围为0~m-1。
  • 二维数组的最大下标元素是array[n-1][m-1]。

例如,定义一个3行4列的整型数组:

int array[3][4];

上述代码声明了一个3行4列的数组,数组名为array,其下标变量的类型为整
型。该数组的下标变量共有3×4个,即array[0][0]、array[0][1]、array[0][2]、array[0][3]、array[1][0]、array[1][1]、array[1][2]、array[1][3]、array[2][0]、array[2][1]、array[2][2]、array[2][3]。
在C语言中,二维数组是按行排列的,即按行顺次存放,先存放array[0]行,再存放array[1]行。每行有4个元素,也是依次存放。

2. 二维数组的引用

二维数组元素的引用一般形式如下:数组名[下标][下标];

二维数组的下标可以是整型常量或整型表达式。

例如,对一个二维数组的元素进行引用:

array[1][2];

上述代码表示的是对array数组中第2行的第3个元素进行引用。不管是行下标还是列下标,其索引都是从0开始的。

3.二维数组初始化

二维数组和一维数组一样,也可以在声明时对其进行初始化。在给二维数组赋初值时,有以下4种情况:
(1)可以将所有数据写在一个大括号内,按照数组元素排列顺序对元素赋值。

int array[2][2] = {1,2,3,4};

如果大括号内的数据少于数组元素的个数,则系统将默认后面未被赋值的元素值为0。
(2)在为所有元素赋初值时,可以省略行下标,但是不能省略列下标。

int array[][3] = {1,2,3,4,5,6};

系统会根据数据的个数进行分配,一共有6个数据,而数组每行分为3列,当然可以确定数组为2行。
(3)也可以分行给数组元素赋值。

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

在分行赋值时,可以只对部分元素赋值。例如:

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

在上行代码中,各个元素的值为:a[0][0]的值是1;a[0][1]的值是2;a[0][2]的值是0;a[1][0]的值是4;a[1][1]的值是5;a[1][2]的值是0。
(4)二维数组也可以直接对数组元素赋值。

int a[2][3]; a[0][0] = 1; a[0][1] = 2;
#include<stdio.h>

int main()
{
        int a [] [3] = {1, 2, 3, 4, 5, 6};
        int i,j;
        for(i=0;i<2;i++)
        {
                for(j=0;j<2;j++)
                {
                        printf("a[%d][%d]=%d ",i,j,a[i][j]);
                        putchar('\n');
                }
        }
        return 0;
}
~  

输出结果:
在这里插入图片描述

下例通过键盘为二维数组元素赋值,显示二维数组,求出二维数组中最大元素和最小元素的值及其下标,将二维数组转换为另一个二维数组并显示。

#include<stdio.h>

int main()
{

        int a[2][3],b[3][2];         /*定义二维数组a和b*/
        int i,j,l,h,Max,Min;

        printf("please input data:\n");
        for(i=0;i<2;i++)
        {
                for(j=0;j<3;j++)
                {
                        printf("a[%d][%d]=",i,j);
                        scanf("%d",&a[i][j]);
                 
                }

        }

        for(i=0;i<2;i++)
        {
                for(j=0;j<3;j++)
                {
                        printf("a[%d][%d]=%d\t",i,j,a[i][j]);
                 
                }

        }
        putchar('\n');

        printf("Below is finding the max_data\n");
        Max = a[0][0];
        l = 0;
        h = 0;
        for(i=0;i<3;i++)
        {
                for(j=0;j<2;j++)
                {
                        if(Max<a[i][j])
                        {
                                Max = a[i][j];
                                l = i;
                                h = j;        
                        }
                }
        }
                                                                                                                                                                                          
		printf("The max_data is max:a[%d][%d]=%d\n",l,h,Max);

        printf("Below is finding the min_data\n");
        Min = a[0][0];
        l = 0;
        h = 0;
        for(i=0;i<2;i++)
        {
                for(j=0;j<3;j++)
                {
                        if(Min>a[i][j])
                        {
                                Min = a[i][j];
                                l = i;
                                h = j;

                        }
                }

        }
        printf("The min_data is min:a[%d][%d]=%d\n",l,h,Min);

        printf("Below is turning a to b\n");
        for(i=0;i<2;i++)
        {
                for(j=0;j<3;j++)
                {
                        b[j][i] = a[i][j];
                }

        }

        for(i=0;i<3;i++)
        {
                for(j=0;j<2;j++)
                {
                        printf("b[%d][%d]=%d\t",i,j,b[i][j]);

                }

        }
        putchar('\n');


        return 0;
}
                                 

输出结果:
在这里插入图片描述

这种赋值的方式就是使用数组引用的数组中的元素。

三、字符数组

数组中的元素类型为字符型时,称为字符数组字符数组中的每个元素可以存放一个字符。字符数组的定义和使用方法与其他数据类型的数组基本相似。

1. 字符数组的定义

字符数组的定义与其他数据类型的数组定义类似,一般形式如下:

char 数组标识符[常量表达式]

因为要定义的是字符型数据,所以在数组标识符前所用的类型是char,后面括号中表示的是数组元素的数量。
例如,定义一个字符数组cArray:

char cArray[5];

其中,cArray表示数组的标识符,5表示数组中包含5个字符型的变量元素。

2. 字符数组的引用

字符数组的引用与其他类型数据引用一样,也是使用下标的形式。例如,引用上面定义的数组cArray中的元素:cArray[0]=‘H’; cArray[1]=‘e’; cArray[2]=‘l’; cArray[3]=‘l’;cArray[4]=‘o’;
上面的代码依次引用数组中的元素为其赋值。

3.字符数组初始化

在对字符数组进行初始化操作时,有以下几种方法。
(1)逐个字符赋给数组中的各元素。
这是最容易理解的初始化字符数组的方式。例如,初始化一个字符数组:

char cArray[5]={'H','e','l','l','o'};

定义包含5个元素的字符数组,在初始化的大括号中,每一个字符对应赋值一个数组元素。
在初始化字符数组时要注意,每一个元素的字符都是使用一对单引号“' '”表示的。在循环中,因为输出的类型是字符型,所以在printf函数中使用的是“%c”。通过循环变量i,cArray[i]是对数组中每一个元素的引用。
(2)在定义字符数组时进行初始化,此时可以省略数组长度。
如果初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数来确定数组长度。例如,上面初始化字符数组的代码可以写成:

char cArray[]={'H','e','l','l','o'};

可见,代码中定义的cArray[]中没有给出数组的大小,但是根据初值的个数可以确定数组的长度为5。
(3)利用字符串给字符数组赋初值。
通常用一个字符数组来存放一个字符串。例如,用字符串的方式对数组作初始
化赋值:

char cArray[]={"Hello"};

或者将“{}”去掉,写成:

char cArray[]="Hello";

4、字符数组的结束标志

在C语言中,使用字符数组保存字符串,也就是使用一个一维数组保存字符串中 的每一个字符,此时系统会自动为其添加“\0”作为结束符。

例如,使用下述代码可以初始化一个字符数组:

char cArray[]="Hello";

字符串总是以“\0”作为串的结束符,因此当把一个字符串存入一个数组时,也同时把结束符“\0”存入数组,并以此作为该字符串是否结束的标志。

注:
有了“\0”标志后,字符数组的长度就显得不那么重要了。当然在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。如果在一个字符数组中先后存放多个不同长度的字符串,则应使数组长度大于最长的字符串的
长度。

用字符串方式赋值比用字符逐个赋值要多占一个字节,多占的这个字节用于存放字符串结束标志“\0”。上面的字符数组cArray在内存中的实际存放情况如下图所示。
在这里插入图片描述
“\0”是由C编译系统自动加上的。因此上面的赋值语句等价于:

char cArray[]={'H','e','l','l','o','\0'};

字符数组并不要求最后一个字符为“\0”,甚至可以不包含“\0”。因此下面的写法也是合法的:

char cArray[5]={'H','e','l','l','o'};

是否加“\0”应根据需要来决定。由于系统对字符串常量会自动加一个“\0”,因此,为了使处理方法一致,且便于测定字符串的实际长度以及在程序中做相应的处理,在字符数组中也常常人为地加上一个“\0”。例如:char cArray[6]={‘H’,‘e’,‘l’,‘l’,‘o’,’\0’};

5、字符数组的输入和输出

(1)使用格式符“%c”进行输入和输出。
使用格式符“%c”实现字符数组中字符的逐个输入与输出。例如,循环输出字符数组中的元素:
在这里插入图片描述
其中变量为循环的控制变量,并且在循环中作为数组的下标进行循环输出。
(2)使用格式符“%s”进行输入或输出。
使用格式符“%s”将整个字符串依次输入或输出。例如,输出一个字符串:
在这里插入图片描述
其中使用格式符“%s”将字符串进行输出需要注意以下几种情况:

  • 输出字符不包括结束符“\0”。
  • 用“%s”格式输出字符串时,printf函数中的输出项是字符数组名 cArray,而不是数组中的元素名cArray[0]等。
  • 如果数组长度大于字符串实际长度,则也只输出到“\0”为止。 如果一个字符数组中包含多个“\0”结束字符,则在遇到第一个“\0”时
    输出就结束。
#include<stdio.h>

int main()
{
        char cArray[] = "successful";         /* 定义字符数组,用于保存字符*/
        int i;                                /* 循环控制变量*/

        for(i=0;i<sizeof(cArray);i++)
        {
                printf("%c ",cArray[i]);     /* 逐个输出字符数组中的字符*/

        }
        printf("%s\n",cArray);               /* 直接将字符串输出*/


        return 0;
}

输出结果:
在这里插入图片描述

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃秃秃秃哇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值