数组_C语言快速入门与计算机二级备考

一维数组

数组概念

  • 数组是一种容器,其中所有元素有相同的数据类型
  • 在创建后不能改变大小
  • 数组中的元素在内存中连续依次排列
  • 可以出现在赋值符号的左右两边(在赋值左边的叫做左值)

定义数组

  • 定义一个数组:变量类型 变量名称 [元素数量(必须是整数,可以是变量)]

  • 例如:int a [10];代表名为a的数组中有10个单元,每个单元就是一个int类型的变量

  • 在定义完成后,[ ]内为数组中单元的下标,例如:a[9]=0类似于数学上的a9=0

    从0开始记数,程序应当只使用有效的下标:[0,数组大小-1](否则越界的数组访问会造成问题)

    例如:a[10]=0;这样的写入是错误的,因为a[10]的有效下标为:0到9共10个,不包含10

  • 将值赋给数组中的某一个单元:数组名[数组中的某个单元] = 某个值

    例如:a[i]=0

    定义时不能使用变量,而使用时可以使用变量

  • 数组的大小在c99标准中是动态的(可以用变量赋值[n]),于是可通过让用户先输入需要输入多少个数字,以此定义数组元素数量来规避越界问题

数组的初始化

  • 如何初始化

    在使用变量之前需要对其进行初始化,数组同理

    数组变量不能赋给另一个数组,数组变量本身不能被赋值

    想将一个数组所有元素移交给另一个数组,必须使用遍历

  • 集成初始化

    例如:int a[ ]={2,3,4,5……};

    此时我们不定义数组的具体大小,让编译器替我们数出数组大小并进行初始化

    int a[10]={2};

    我们可以只为数组中的几个元素赋值,编译器会自动将未被我们初始化的元素赋零

    因此例子中遍历初始化每一个元素的代码也可写为int count[number]={0};

  • 集成初始化的定位

    例如:int a[10]={[0]=2,[2]=3,6};

    这时,a0=2,a2=3,a3=6(这个6跟着前面的a2为下一个单元赋值)

    适用于初始数据稀疏的数组

数组应用实例

  • 数出数组中元素多少的代码:

    //数出数组的大小
    sizeof(a)/sizeof(a[0])
    //用整个数组所占字节除以一个其中第一个元素所占字节,得到有多少个元素
    //一旦修改数组中的初始数据,不需要修改遍历的代码
    
  • 当使用数组作为函数的参数时,往往必须再用另一个参数传入数组的大小

    在作为参数时,不能在[ ]内给出数组的大小

    在作为参数时,不能再用sizeof来计算数组大小

    这些都是因为作为参数的数组实际是指针

  • 使用数组的例子

    int main()//这个程序能在输入十个0-9的数字后,统计各个数字出现次数
    {
    	const int number = 10;//使用常量来定义数组的大小
    	int x;
    	int count[number];//定义一个数组count
    	int i;
    	for (i = 0; i < number; i++)//初始化数组,将数组中每一个元素赋初始值0
    	{
    		count[i] = 0;
    	//遍历数组,通常使用for循环,让循环变量i<数组长度,这样i最大正好是数组最大有效下标
    	}
    	for(int cnt=0;cnt<number;cnt++)
    	{
    		scanf("%d", &x);
    		if (x >= 0 && x <= 9)
    			count[x]++;//数组参与运算
    	}
    	for (i = 0; i < number; i++)
    	{
    		printf("%d:%d\n", i, count[i]);//遍历数组输出
    	}
    }
    

二维数组

  • 之前所使用的只有一个下标的数组为一维数组

  • int a[i][j] 是一个二维数组,表示有着i行j列的矩阵

    例如:int a[2][3]在内存中排列为:

    a[0][0]  a[0][1]  a[0][2]
    a[1][0]  a[1][1]  a[1][2]
    
  • 注意a[i,j]是错误的二维数组表达方式,它代表一个逗号运算,结果是a[j]

二维数组的遍历

  • 二维数组有两个下标,需要两重循环进行遍历

    例如:

    for (i=0;i<3;i++)
    {
    	for(j=0;j<5;j++)
    	{……
    

二维数组的初始化

  • 列数必须给出,行数可以由编译器来数,每行有一对

    例如:

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

posted on 2024-11-15 13:53  无术师  阅读(6)  评论(0编辑  收藏  举报