C语言--数组


前言

大家好,今天我们来讲解一下有关数组的简单知识。

一、数组是什么?

数组是一段连续空间上相同类型数据的集合。
int a = 0;//这是一个整形变量
当我们只需要存储5个数据的时候我们当然可以创建5个变量,
但是如果我们是要统计全班50个同学的成绩,那我们再创建50个变量就不是那么方便了,
在往上要统计全校2000名学生的成绩呢?这个时候只是命名就够我们头疼一阵的,
这时数组的简洁性就体现出来了

代码如下(示例):

int arr[50] = { 0 };//能够存放50个整形数据的数组
int arr[2000] = { 0 };//存放2000个整形数据

1、数组可以创建为任意类型,例如:int,char,double等
2、数组可以通过下标进行访问,下标运算符为:[ ];
这里需要注意的是 数组的下标是从 0 开始的,
也就是说创建一个数组: int arr[5] = { 0 };
arr[0]是数组的第一个元素,arr[1]是数组的第二个元素,
以此类推,数组的最后一个元素为arr[4] 而不是 arr[5]
在这里插入图片描述
3、数组元素存储在一块连续的内存空间
这里要用到 取地址运算符:&(取出该变量在内存中存储空间的首地址);
如图 &arr[0] = 0xE33AF450;(0x开头为16进制)
大家知道一个整形变量占四个字节,那么每往后一个元素,它的首地址都会增加4
在这里插入图片描述


二、习题练习:

1.求10名学生中的最高成绩

代码如下(示例):

#include<stdio.h>
int main() {
	int arr[10] = { 0 };
	puts("请输入10名学生的成绩。");//puts("");输出字符串并换行
	
	int i = 0;
	for (i = 0; i < 10; i++) {
		printf("arr[%d] = ", i);
		scanf("%d", &arr[i]);
	}
	
	int max = arr[0];//将第一名学生的成绩赋给max
	for (i = 1; i < 10; i++) {//从第二个学生开始比较
		if (max < arr[i])
			max = arr[i];
	}
	printf("最高分为:%d\n", max);
	return 0;
}

在这里插入图片描述


2.对5名学生的成绩升序排序

代码如下(示例):

#include<stdio.h>

int main() {
	int arr[5] = { 0 };
	int i = 0;
	puts("请输入5名学生的成绩。");
	for (i = 0; i < 5; i++) {
		printf("arr[%d] = ", i);
		scanf("%d", &arr[i]);
	}

	for (i = 0; i < 4; i++) {	//冒泡排序
		for (int j = 0; j < 5 - 1 - i; j++) {
			if (arr[j] > arr[j + 1]) {
				int z = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = z;
			}
		}
	}
	
		puts("通过冒泡排序进行升序。");
		for (i = 0; i < 5; i++) 
			printf("arr[%d] = %d\n", i, arr[i]);
		printf("\n");
	return 0;
}

在这里插入图片描述


三、特别注意:

1.数组名的使用有两种特例
第一种是sizeof(数组名),这里的数组名代表整个数组,求出来的是整个数组所占的字节数
第二种是&数组名,这里的数组名代表的是整个数组的地址,求出的是整个数组的地址大小
除了以上两种情况,其他数组名都表示首元素的地址。

2.int arr[] = {0, 1, 2, 3, 4};
此处初始化时省略了数组的大小,编译器就会根据我们初始化时的数据个数自动初始化数组大小,
此处就初始化为arr[5]。
由此可见数组的个数是可以省略的,但是要注意多维数组的省略方式
例如:int arr[3][4] = { 0 };这是一个三行四列数组,我们可以把它看做元素类型为 int [4],元素个数为3的数组
这里同样可以省略元素个数写成 int arr[ ][4] = { 1,2,3,4,5,6 }; 此时元素个数为 2
同理得 int arr[ ][4][5] = { 1,2,3,4,5,6 }; 元素类型为 int [4][5] ,元素个数为 1
但是注意不能写成 int arr[3][] = { 1,2,3,4,5,6 }; 这样写的话相当于元素类型不明确,编译器不知道应该如何分配这些整数。

3.数组作为参数传递时传递的是元素首地址,而不是整个数组
所以如果在被调用函数中使用 sizeof(arr)/ sizeof(arr[0]) 这样是算不出来元素个数的,
数组作为参数传递时是不可能传过去整个数组的,所以如果在传参时需要将元素个数一并传出。


总结

今天的第一部分所讲是数组最基本的知识,第三部分难度有所提高,下一篇博客我们再详细探讨,
今天就到这里,谢谢大家。

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值