自学内容网 自学内容网

【玩转C语言】第五讲--->数组-->一维和多维深度理解

 🔥博客主页🔥:【 坊钰_CSDN博客 】

欢迎各位点赞👍评论✍收藏⭐

引言:

大家好,我是坊钰,为了让大家深入了解C语言,我开创了【玩转C语言系列】,将为大家介绍C语言相关知识,另外,还会不定时更新【C语言训练题库】,想学好C语言的宝子们,一定要收藏起来,一起努力吧!

点赞!收藏!以防以后找不到了!!!

目录

1. 数组的概念

2. ⼀维数组的创建和初始化

2.1 数组创建

2.2 数组的初始化

2.3 数组的类型

3. 一维数组

3.1 数组下标

3.2 数组打印

3.3 数组的输入

4. 一维数组在内存中的存储

5. sizeof计算元素个数

6. 二维数组

6.1 二维数组的创建

7. 二维数组的初始化

7.1 不完全初始化

7.2 完全初始化

7.3 按行初始化

7.4 可省略行,不可省略列

8. 二维数组的使用

 8.1 二维数组的下标

8.2 二维数组的输入和输出

9. 二维数组在内存中的存储

10. 小结


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)!