C语言回顾8-04-19

C语言回顾-数组


今天我们来复习一下数组,这是一个特殊的数据结构。当我们有很多相同的数据,如果每个数据都要有个定义的话就很麻烦,数组就是包含多个相同类型数据值的数据结构。这些数据值称为元素,可以跟所在数组的位置一个个选出来。

  1. 一维数组

    最简单的数组就是一维数组,他们在内存中连续排列,比如当一个名字为a的数组他的排列方式为

    a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]

     

    声明数组的时候,需要定义数组的类型和数组的长度,比如我们声明数组a有十个整型变量,要用:

    int a[10];

    然后我们要学习一下数组的用法,最重要的是数组下标,就是[]内的数字,数组的名字一个地址,指向数组的第一个元素,而且数组内元素依次排列,并且字节大小相等,那么每次给数组首地址移动它这么大小的单位就可以实现访问数组,但是在数组里,第一个元素为a[0],他是从0开始排列的,也就是第十个元素其实是a[9],这点需要重点记忆。并且这里a[9]的意思其实是*(a+9),*是与&对应的寻址符,而a是一个地址,

    然后还有数组的初始化,可以再定义的时候初始化,int a[5]={1,2,3,4,5};也可以先定义后面在定义,下面我们用上次新学的scanf来输入一个数组并打印,代码如下:

    #include<stdio.h>
    int main()
    {
    	int i,a[10];
    	for(i=0;i<10;i++)//让i冲0到9循环十次
    	{
    		scanf("%d",&a[i]);//每次对a[i]进行赋值
    	}
    	for(i=0;i<10;i++)
    	{
    		printf("%d ",a[i]);//这里我们用一个循环打印出数组内的数据
    	}
    	getchar();
    	getchar();//这里我们讲过,一个getchar 已经暂停不了了
    	return 0;
    }

    我们依次录入数据并回车确认,程序运行结果如下:

     

    但是还有一点,我们讲过a是数组第一个元素的地址,其实a[9]数组下标实际上和*(a+9)表达式一样,两个等价,*是是和&对应的寻址运算符。但是第二个更能说明a是一个地址,关于地址和指针我们会在后面学到。现在只要知道a是一个地址,a+n是在a的地址上加上一个单位的a的类型的内存,他是int类型的,也就是4字节,那么一次将移动四个单位,来实现数组遍历,那么也很容易理解,数组的内存怎么计算呢?应该是每个数据的大小乘以数组元素的数量。

  2. 多维数组

有时候我们想要保存一个二维表格式的数据,一维数组显然不够用了,我们就要用到二维数组,他的定义和一维数组很像,比如我们想定义一个整形的3*3的表格内容,需要代码:int a[3][3];,这样就是一个三行三列的数组,同样可以用下标来询问数据,他在内存;里这样排列:

 

也就是a还是第一个元素的地址,然后如果是三列的数组,(a+3)就到了第”一“行的首元素,然后再用第二个[]来下标取值,第二行第三个元素应该表示为a[1][2](再从注意,数组是从0开始计算顺序的)。

最后,我们用二维数组做一个程序,求一个数组中元素的最大值,代码如下:

#include<stdio.h>
int main()
{
	int i,j,MAX=0,a[3][3]={1,2,3,4,5,6,7,8,9};//定义变量和一个整形二维数组
	for(i=0;i<3;i++)//先用i作为数组的行,从0到2循环三次
	{
		for(j=0;j<3;j++)//再次嵌套一个for循环,用来循环列
		{
			printf("%d ",a[i][j]);//这里我们把数组元素打印出来
			if(a[i][j]>=MAX)MAX=a[i][j];//这里做一个判断,如果这个是数比MAX大,
			//就把他赋给MAX,那么最后MAX一定是最大的
		}
		putchar('\n');//这里用putchar打印换行符进行换行
	}
	printf("\nMAX=%d",MAX);//打印MAX的值
	getchar();
	return 0;
}

他的运行结果是这样的:

这里复杂一点,也是多记忆多理解吧。


15 : 50

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值