【玩转C语言】第五讲--->数组-->一维和多维深度理解
欢迎各位点赞👍评论✍收藏⭐
引言:
大家好,我是坊钰,为了让大家深入了解C语言,我开创了【玩转C语言系列】,将为大家介绍C语言相关知识,另外,还会不定时更新【C语言训练题库】,想学好C语言的宝子们,一定要收藏起来,一起努力吧!
点赞!收藏!以防以后找不到了!!!
目录
1. 数组的概念
数组是⼀组相同类型元素的集合,有两点要记住
- 数组中存放的是1个或者多个数据,但是数组元素个数不能为0
- 数组中存放的多个数据,类型是相同的
数组分为⼀维数组和多维数组
2. ⼀维数组的创建和初始化
2.1 数组创建
type arr_name[m]
- type:为数组的数据类型
- arr_name:为数组名
- m:为数组大小
例:
一个班有20个学生
int Student[20]
2.2 数组的初始化
在创建的同时给予相应的元素,例:
//完全初始化
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//不完全初始化
int arr[10] = {1}; //第一个元素为1,后面全为0
2.3 数组的类型
数组跟数据一样,有整型,字符型,浮点型
例:
int arr[10] //整型数组
char arr[10] //字符型数组
double arr[10] //浮点型数组
3. 一维数组
平常使用的都为一维数组,如:
int arr[10]
char arr[10]
...
3.1 数组下标
我们看一张图
数组的下标从 0 开始的,一个数组有 n 个元素,那最后一个元素的下标为 n-1
例:
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", arr[5]);
return 0;
}
结果:
3.2 数组打印
那么我们该如何打印一个数组的元素呢?
一个数组有多个元素,我们需要使用到循环(for循环)
例:
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
结果:
3.3 数组的输入
明白数组的打印,我们也可以按我们的需要来输入元素
例:
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
for (int i = 0; i < 10; i++)
{
scanf("%d ", &arr[i]);
}
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
结果:
4. 一维数组在内存中的存储
数组中元素,随着下标的增大,地址随之增大,那数组中元素是如何存放的呢?
我们打印数组元素的地址:
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (int i = 0; i < 10; i++)
{
printf("&arr[%d] = %p \n",i, &arr[i]);
}
return 0;
}
从输出的结果我们分析,数组随着下标的增长,地址是由小到大变化的,并且我们发现每两个相邻的 元素之间相差4(因为⼀个整型是4个字节)
得出结论:数组在内存中是连续存放的
5. sizeof计算元素个数
当我们想要快速知道数组元素个数时,就可以利用sizeof 操作符
例:
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int count = sizeof(arr) / sizeof(arr[0]);
printf("%d ", count);
return 0;
}
关键:
int count = sizeof(arr) / sizeof(arr[0]);
用整个数组大小除以一个元素的大小就可以得到数组的元素个数
6. 二维数组
了解了一维数组,我们来了解二维数组
6.1 二维数组的创建
int arr[3][4];
char arr[5][4];
- 3表示数组有3行
- 4表示每⼀行有4个元素
- int 表示数组的每个元素是整型类型
- arr 是数组名,可以根据自己的需要指定名
7. 二维数组的初始化
7.1 不完全初始化
int arr1[3][5] = {1,2};
int arr2[3][5] = {0};
7.2 完全初始化
int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
7.3 按行初始化
int arr4[3][5] = {{1,2},{3,4},{5,6}};
7.4 可省略行,不可省略列
int arr5[][5] = {1,2,3};
int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}};
8. 二维数组的使用
8.1 二维数组的下标
建立一个二维数组
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7}
例:
int main()
{
int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
printf("%d ", arr[2][4]);
return 0;
}
结果:
8.2 二维数组的输入和输出
知道如何建立二维数组,那我们来了解二维数组的输入和输出
例:
#include <stdio.h>
int main()
{
int arr[3][5] = {0};
for (int i = 0; i < 3; i++) //产生行号
{
for (int j = 0; j < 5; j++) //产生列号
{
scanf("%d ", &arr[i][j]); //输入
}
}
for (int i = 0; i < 3; i++) //产生行号
{
for (int j = 0; j < 5; j++) //产生列号
{
printf("%d ", arr[i][j]); //输出
}
printf("\n");
}
return 0;
}
结果:
9. 二维数组在内存中的存储
知道了一维数组在内存中的存储,让我们来了解一下二维数组的
例:
#include <stdio.h>
int main()
{
int arr[3][5] = { 1,1,1,1,1,2,2,2,2,2,3,3,3,3,3 };
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 5; j++)
{
printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
}
}
return 0;
}
从输出的结果来看,每⼀行内部的每个元素都是相邻的,地址之间相差4个字节,跨行位置处的两个元 素(如:arr[0][4]和arr[1][0])之间也是差4个字节
得出结论:⼆维数组中的每个元素都是连续存放的
10. 小结
以上就是关于【玩转C语言】第五讲的内容了,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持!
原文地址:https://blog.csdn.net/Gao123456fy/article/details/140589931
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!