C语言从头学28——数组(一)

一、基本概念
       数组是一组相同类型的值被顺序地储存在一起。数组表示方法为变量名加方括号,方括号里是数组的成员数量。例如:
       int arr[20];  //声明了一个 int 类型的名为 arr 包含20个成员的数组
       数组的成员是从0开始编号的,所以数组的编号永远小于成员数量,这也是遍历数组时循环条件用 "<" 而不用 "<=" 的原因。 数组名加方括号和指定编号,就可以像普通变量那样为其赋值或引用这个成员。例如:
       arr[10]=100;
       int x=2*arr[10];
       注意: 如果引用不存在的数组成员(即越界访问数组)写代码时并不会报错,有些在编译时会被发现,有些编译时也发现不了。使用数组越界是非常值得重视的问题。例如,接上面的例子:
        for(int i=0;i<=20;i++)
        {
            printf("%d",arr[i]); //当i=20时数组越界,这是很容易犯的错误
        }
       数组可以在声明时(仅在声明时),使用大括号同时对每一个成员赋值;数组声明后的赋值也称为数组的初始化。例如:
       int arr02[5] = {1,2,3,4,5}; //如赋值不足5个,剩余的会赋成0
      当我们声明成员数量大的数组时,为防止访问时出现莫名其妙的值,可以一次性全部赋值成0(初始化成0),做法如下:
       int arr03[1024]={0};
   如果我们在声明时即全部赋初值,可以省略"[ ]"中的成员数,编译器会自动补上。
       int arr04[]={6,7,8,9,10,11}; //可以正常编译
二、数组长度
       sizeof 是一个运算符(也可以理解成是函数),它可以返回数组的字节长度。返回的具体字节长度与数组的类型、成员个数及使用的系统相关。以int arr[20]为例:
       int a = sizeof(arr);  //以数组名为参数,返回整个数组的字节长度
       int b = sizeof(arr[0]);  //以某一成员为参数,返回单个成员的字节长度
       int c = sizeof(arr) / sizeof(arr[0]); //可以计算出数组的成员个数
三、多维数组
       数组名称后带有多对中括号的数组称为多维数组。两对 "[ ]" 的是二维数组,三对 "[ ]" 的是三数组,依此类推。
       以二维数组为例:
       int arr[3][4]; //声明了一个3行4列的二维数组
      二维数组也可以用{ }赋初值,{ 0 }给所有成员赋初值0。在用{ }赋初值时,为了行列显示清楚,可以多加几对大括号。举例:
      int arr[3][4]={   {1,2,3,4},
                             {4,3,2,1},
                             {5,6,7,8}  };  //如把内部的三对大括号拿掉也不影响赋值,带上层次更清楚。
四、附上一个遍历二维数组并计算数组字节长度的小程序:

#include<stdio.h>
int main(void)
{
//a.声明数组并赋初值
    int arr[3][4] = { {1,2,3,4},
                      {4,3,2,1},
                      {5,6,7,8} };
//b.通过两重循环遍历二维数组
    for (int i = 0; i < 3; i++) //一般外层循环行(反过来也无所谓)
    {
        for (int j = 0; j < 4; j++) //内层循环列
        {
            printf("   %d", arr[i][j]); //显示数组成员的值
        }
        printf("\n"); //显示一行结束时换行
    }
//c.计算数组字节长度等信息
    int sum = sizeof(arr);//返回整个数组字节总长度
    int a = (int)sizeof(arr) / sizeof(arr[0]); //返回数组行数
    int b = (int)sizeof(arr[0])/sizeof(arr[0][0]); //返回数组行数
    int c = (int)sizeof(arr) / sizeof(arr[0][0]); //返回数组成员数
    printf("数组总字节长%d  行%d 列%d 成员总数%d", sum,a,b,c);
    getchar();
    return 0;
}

//运行结果:
     1   2   3   4
     4   3   2   1
     5   6   7   8
     数组总字节长48  行3 列4 成员总数12
     实际上在计算机内部,二维数组的存储也是线性的没有行和列之分,一字排开,arr[0][0]是第一个,的后面是arr[0][1],接着arr[0][2],再后边arr[0][3]、arr[1][0]、arr[1][1]、......、直到arr[2][2]、arr[2][3]。推而广之,三维、四维也是一样。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值