当前位置:网站首页>C语言--数组
C语言--数组
2022-07-27 17:45:00 【慵懒熊猫】
前言
大家好,今天我们来讲解一下有关数组的简单知识。
一、数组是什么?
数组是一段连续空间上相同类型数据的集合。
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]) 这样是算不出来元素个数的,
数组作为参数传递时是不可能传过去整个数组的,所以如果在传参时需要将元素个数一并传出。
总结
今天的第一部分所讲是数组最基本的知识,第三部分难度有所提高,下一篇博客我们再详细探讨,
今天就到这里,谢谢大家。
边栏推荐
- 内置函数其它函数
- C171: attendance system
- Online judge output overrun
- PMP每日一练 | 考试不迷路-7.27(包含敏捷+多选)
- 2022年,软件测试还能学吗?别学了,软件测试岗位饱和了...
- PMP practice once a day | don't get lost in the exam -7.27 (including agility + multiple choices)
- 想转行软件测试,先过这三关,包含一份3000字超全测试学习指南
- 调整数组使奇数全部都位于偶数前
- Unified Modeling Language (UML) specification
- Sword finger offer 25. merge two sorted linked lists
猜你喜欢

ViewUI 中 DatePicker 日期选择器在 IE11 浏览器中兼容解决方案

codeforces每日5题(均1500)-第二十四天

一看就懂的ESLint

MVCC的底层原理

Sword finger offer 25. merge two sorted linked lists

Source code analysis of Chang'an chain data storage

想转行软件测试,先过这三关,包含一份3000字超全测试学习指南

GLTF模型添加关节控制

C background GC cause and effect

antdv: Each record in table should have a unique `key` prop,or set `rowKey` to an unique primary key
随机推荐
如何快速提升抖音小店三分钟回复率?哪些情况会影响抖音小店回复率呢?
Solve the problem of displaying the scroll bar when there is no data in the viewui table
[pytorch series] detailed explanation of the torchvision image processing library of pytorch
化工巨头巴斯夫&Pasqal:利用量子神经网络优化天气预报
LeetCode练习2——两数之和
如何运行 kevinchappell / formBuilder
kubectl 获取pod日志 —— 筑梦之路
C193: scoring system
传英特尔将停掉台积电16nm代工的Nervana芯片
ECU software and hardware architecture
长安链数据存储源码分析
mysql函数汇总之系统信息函数
内置函数锁相关
Cesium常用坐标系详细介绍
[redis] redis penetration, avalanche and breakdown
2019年全球半导体营收同比下滑12%,中国市场份额第一
[C #] positive sequence, reverse sequence, maximum value, minimum value and average value
In a real case, college students were cheated when taking orders. I hope you won't be cheated [painful lesson]
What does bus mean
Ms721 load test

