C语言的数组

数组是C语言中的聚合类型之一,可以存储多个具有相同类型的数值。每个数据值称为元素,可通过其在数组中的相对位置访问。

一维数组

一维数组是最简单的数组,数组中的各个元素在内存中依次排列,占用一组连续的内存空间。数组的声明格式如下:

类型 数组名[数量]

数组的类型可以是任何类型,数量可以是整型常量或整型常量表达式。为了支持方便地调整数组的长度,可以通过定义宏替代数量。

可以通过在数组名后用一个方括号围绕、标识元素位置的整数值来获取特定的数据元素,这个整数值也称为下标或索引。在C语言中,数组元素的索引始终是从0开始,长度为n的数组元素的索引是0,1,...,n-1a[i]格式的表达式代表第i个数组元素,对应着内存中的存储单元,因此它是左值可以和变量一样使用。访问数组元素的索引可以是任何整型表达式,但注意:索引一定不能小于0或大于数组的长度

数组使用常量表达式列表来进行初始化,常量表达式列表是用大括号括起来的一组数值,各数值间用,分割,不能为空。常量表达式列表的数值个数不能多于数组长度,如果常量表达式比数组短,则数组中剩余的元素赋值为0。在初始化数组时可以忽略数组长度,则由编译器根据常量表达式列表确定数组的大小。

可以使用sizeof计算数组的大小,也可以根据数组大小和元素大小计算数组的长度。

/**************************************
 * using_arrays.c                     *
 *                                    *
 * C语言中的数组                      *
 **************************************/

#include <stdio.h>

#define N 10

int main()
{
  int a[N] = {0,1,2,3,4,5,6,7,8,9};
  int b[10] = {0};
  int c[10] = {0,1,2,3};
  int d[] = {0,1,2,3};

  int i = 0;
  printf("数组a的长度: %lu\n", sizeof(a)/sizeof(int));
  printf("a:");
  for (i = 0; i < N; i++)
    printf(" %d", a[i]);
  printf("\n");

  printf("数组b的长度: %lu\n", sizeof(b)/sizeof(int));
  printf("b:");
  for (i = 0; i < 10; i++)
    printf(" %d", b[i]);
  printf("\n");

  printf("数组c的长度: %lu\n", sizeof(c)/sizeof(int));
  printf("c:");
  for (i = 0; i < 10; i++)
  {
    printf(" %d", c[i]);
  }
  printf("\n");

  unsigned long dSize = sizeof(d)/sizeof(int);
  printf("数组d的长度: %lu\n", dSize);
  printf("d:");
  for (i = 0; i < dSize; i++)
    printf(" %d", d[i]);
  printf("\n");

  return 0;
}

一维数组

多维数组

数组可以有多个维度,多维数组的声明格式为:

类型 数组名[维度1数量][维度2数量]...[维度N数量]

为了指定多维数组的元素,需要使用a[i1][i2]...[iN]形式,依次指定元素在各维度上的索引。多维数组在内存中依然是依次连续存储的,依次存储a[0][0]...[0],..., a[N1-1][0]...[0], a[0][1]...[0],..., a[N1-1][1]...[0],...

可以通过嵌套低维初始化式的方法初始化高维数组,每个低维初始化式用以初始高维数组的一个元素。同一维数组类似,初始化高维数组也具有以下形式:

  • 如果初始化式不足以初始化数组所有元素,则未被初始化的元素赋值为0。
  • 如果低维初始化式不足以初始化高维数组的一个数组元素,则该元素的剩余元素赋值为0.
  • 也可以利用一个常量表达式列表来初始化多维数组,由编译器依照存储形式构建多维数组,未初始化元素赋值为0。但这样可能会使得初始化式的混乱。因此gcc编译器开启-Wall选项编译时为报出“missing braces around initializer”警告。
/**************************************
 * using_multi_arrays.c               *
 *                                    *
 * C语言中的多维数组                  *
 **************************************/

#include <stdio.h>

#define ROW 5
#define COL 9

int main()
{
  int m[ROW][COL] = {{1,1,1,1,1,0,1,1,1},
                     {0,1,0,1,0,1,0,1,0},
                     {0,1,0,1,1,0,0,1,0},
                     {1,1,0,1,1,0,0,1,0},
                     {1,1,0,1,0,0,1,1,1}};
  int n[ROW][COL] = {{1,1,1,1,1,0,1,1,1},
                     {0,1,0,1,0,1,0,1,0},
                     {0,1,0,1,1,0,0,1,0}};
  int p[ROW][COL] = {{1,1,1,1,1,0,1,1,1},
                     {0,1},
                     {0,1,0,1},
                     {1,1,1,1},
                     {1,1,0,1}};
  int w[ROW][COL] = {1,1,1,1};

  int i = 0;
  int j = 0;

  printf("m:\n");
  for (i = 0; i < ROW; i++)
  {
    for (j = 0; j < COL; j++)
      printf("%d ", m[i][j]);
    printf("\n");
  }

  printf("n:\n");
  for (i = 0; i < ROW; i++)
  {
    for (j = 0; j < COL; j++)
      printf("%d ", n[i][j]);
    printf("\n");
  }

  printf("p:\n");
  for (i = 0; i < ROW; i++)
  {
    for (j = 0; j < COL; j++)
      printf("%d ", p[i][j]);
    printf("\n");
  }

  printf("w:\n");
  for (i = 0; i < ROW; i++)
  {
    for (j = 0; j < COL; j++)
      printf("%d ", w[i][j]);
    printf("\n");
  }

  return 0;
}

多维数组

参考文献

  1. K.N. King 著,吕秀峰 译. C语言程序设计-现代方法. 人民邮电出版社
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值