C语言学习笔记(三)——数组

  第三章                                    数组

 

数组的特点:

1.n个变量连续分配存储空间,即数组必为连续分配。

2.所有的变量数据类型必须相同。

3.所有变量所占的字节大小必须相等。

 

int a[5]; //a为数组名,表示a[0]的地址。所以不能出现 a = b这样的赋值写法(ab均为数组名)。

数组中的元素用a[下标]表示,数组中有下标是因为数组中的元素是连续的。

数组名[下标]之所以能够表示元素,是因为a[i]完全等价于*(a+i)

a[i]也可以写作[i]a

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

        a[1]= 18;

        3[a]= 20; //因为数组名a[3]等价于*(a+3)等价于*(3+a),所以a[3]等价于3[a]

 

数组的初始化:

             完全初始化:

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

             不完全初始化,未被初始化的值将自动为零:

                      inta[5] = {1, 2, 3};

             不初始化,所有元素的值是垃圾值:

                      inta[5];

             清零,利用不完全初始化的性质:

                      inta[5] = {0}; //a[0]将被赋值为0,其他的将自动归零。

注意!错误写法:

             inta[5]; //此处a[5]中的5表示数组中元素个数,只有在定义时此处数字才表示个数。

             a[5]= {1,2,3,4,5} //此处a[5]表示一个元素,且数组中没有a[5]这个元素,5表示数组下标5

只有在定义数组的同时才可以整体赋值,其他情况下整体赋值都是错误的。

 

数组的其他操作:赋值、排序、求最大/最小值、倒置、查找、插入、删除等。

 

将数组中的元素倒序

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

    inti, j, t;

    i= 0;

    j= 6;

    while(i < j) //ij分别是数组元素的首下标和尾下标

    {

             t= a[i];

             a[i]= a[j];

             a[j]= t;

             ++i; //元素互换后,ij分别自增自减

             --j;

    }

    /*

    for(i=0, j=6; i<j; ++i, --j) //这样写也可以,分号为三段分隔,逗号为内部分隔。但这样写有些麻烦,可以使用上面的while写法。

    {

             t= a[i];

             a[i]= a[j];

             a[j]= t;

    }

    */

 

一维数组的定义:int a[5]; //a为数组名,5表示数组a中有5个元素。(注意:此处数组个数定义与VB中的数组个数定义不同。)

多维数组的定义:int a[8][6][x][y]...;

             如:int a[8][6];二维数组,有86列,共48个元素。相当于矩阵。其名称也从a[0][0]a[7][5]

多维数组的初始化:

             inta[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

 

             inta[3][4] = {

             {1,2, 3, 4},

             {5,6, 7, 8},

             {9,10, 11, 12}

             };               //推荐这样写,比较整齐。

 

输出多维数组内容,需要多重循环嵌套使用:

 

    inti, j;

    

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

    {

             for(j=0; j<4; j++)

                      printf("%-4d",a[i][j]); //对输出格式的控制:%-4d中,负号表示左对齐,4表示每个元素占4个字

             printf("\n"); //输出换行符           节。

    }

 

多维数组的应用:

             对二维数组排序;

             求第一行的最大/最小值;

             判断矩阵是否对称;

             矩阵的相乘等。

 

问题:是否存在多维数组?

    不存在!

    因为内存是线性一维的。

    n维数组是看作每个元素都是n-1维数组的一维数组,

    n-1维数组又可以看作每个元素都是n-2维数组的一维数组,依次类推,即n维数组全被看作是一维数组的集合。

如:

    inta[3][4][5];

             该数组是含有3个元素的一维数组,

             只不过每个元素都是45列的二维数组。

 

数组的赋值与输出:

注:因为数组中的元素比较多,所以数组的赋值与输出经常与循环结合使用。

# include <stdio.h>

 

int main(void)

{

    inta[5] = {1, 2, 3, 4, 5}; //数组名a后跟中括号[],赋值用大括号{},并以逗号隔开。5表示数组a中有5个元素,

    inti;                     //其分别用a[0], a[1], a[2], a[3], a[4]表示。注意第一个元素从0开始!

 

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

    {

             printf("a[%d]= %d\n", i, a[i]);

    }

 

    return0;

}

 

/*

    输出结果:

                      a[0]= 1

                      a[1]= 2

                      a[2]= 3

                      a[3]= 4

                      a[4]= 5

                      Pressany key to continue

*/


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值