当前位置:   article > 正文

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

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}  };  //如把内部的三对大括号拿掉也不影响赋值,带上层次更清楚。
四、附上一个遍历二维数组并计算数组字节长度的小程序:

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

//运行结果:
     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]。推而广之,三维、四维也是一样。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/781524
推荐阅读
相关标签
  

闽ICP备14008679号