c语言1维数组_数据结构c语言版第二版课后答案

c语言1维数组_数据结构c语言版第二版课后答案编写程序过程中,有时候会用到大量的相同类型的数据

数组


前言

编写程序过程中,有时候会用到大量的相同类型的数据。如果给每个变量都去单独定义,编程过程将会显得繁琐复杂,使用数组可以很好得解决这个问题。
在这里插入图片描述


一、一维数组

什么是数组?数组是一个由若干个相同类型的变量组成的集合,引用这些变量可以使用同一个名字。数组均有连续的存储单元组成,最低地址对应数组的第一个元素,最高地址对应于数组的最后一个元素。数组可以是一维数组也可以是多维数组。

1.1 一维数组的定义

一维数组实际上就是一组相同类型的数据的线性集合。
一维数组的定义形式如下:

类型 标识符[常量表达式]; 

类型:表示数组中元素的类型
标识符:表示该数组变量的名称,命名规则与变量名一致
常量表达式:定义数组中存放的元素个数,即数组长度

例如:定义一个包含5个整形元素的数组

int arr[5]; 

1.2一维数组的初始化

一维数组的初始化一般有三种方法。

1.定义数组时直接对数组赋初值(数组元素放在一对大括号中{})。

int arr[5]={ 
   1,2,3,4,5}; 

2.只给一部分元素赋初值,未赋值的元素默认为0。

int arr[5]={ 
   1,2,3}; //实际上数组元素是 1,2,3,0,0 

3.给所有元素赋初值,不指定数组长度。

int arr[]={ 
   1,2,3,4,5}; 

注意:使用第三种方法时一定要给数组元素赋值,否则会报错。
这样写是错的: int arr[]; ❌ int arr[] = {}; ❌
但是这样写是可以的: int arr[] = {0}; ✅ ==> 给arr数组赋了一个值为0的元素

1.3 一维数组的应用

遍历一维数组:

int arr[5] = { 
   1,2,3,4,5}; //计算数组中的元素个数  //sizeof(arr)计算数组arr总字节大小 sizeof(arr[0])计算arr数组中一个元素的字节大小 相除等于arr数组元素个数 int sz = sizeof(arr)/sizeof(arr[0]); for(int i = 0;i < sz;i++){ 
    printf("%d ",arr[i]); } 
1 2 3 4 5 

1.4 一维数组在内存中的存储

一维数组在内存中的存储是怎样的呢?要想知道这个问题,我们先打印一下他的地址。

int arr[5] = { 
    1,2,3,4,5 }; int sz = sizeof(arr) / sizeof(arr[0]); for (int i = 0; i < sz; i++) { 
    printf("arr[%d] = %p\n",i ,&arr[i]); } 

在这里插入图片描述
这里我们可以发现,每一个元素都相差4个字节,30–>34–>38–>3C–>40,这是怎么回事呢,我们来看一下图解:
在这里插入图片描述
在我们的内存中,每一小格就代表内存单元中的一个字节,因为int类型在内存中占4个字节,所以地址编号0-3所占的4个字节就是arr[0]这个数组元素,也就是我们打印出来的0076FD30这个地址。同理,地址编号4-7所占的4个字节是arr[1]数组元素,实际地址是0076FD34,arr[2],arr[3],arr[4]这里就不再赘述。

由上面的图解我么可以看出一维数组在内存中存放的特点:

🌟一维数组在内存中是连续存放的。

🌟随着数组下标的增长,存储地址是从低到高增长的。

在这里插入图片描述


二、二维数组

什么是二维数组?二维数组可以把他想象成一张表格,想要定位表格中的一格,就需要知道他的行号和列号。所以二维数组是有两个下标的,反过来说,C语言中,我们将下标有两个的数组称为二维数组。

2.1 二维数组的定义

二维数组可以看作是特殊的一维数组,其各元素仍是一个数组。

数据类型 数组名[常量表达式1][常量表达式2]; 

常量表达式1定义了数组的行数,常量表达式2定义了数组的列数。不管是行下标还是列下标,索引都是从0开始,定义一个m行n列的二维数组arr[m][n],行下标取值范围0到m-1,列下标取值范围0到n-1,最大下标元素是arr[m-1][n-1]。例如,定义一个3行4列的整形数组:

int arr[3][4]; 

2.2 二维数组的初始化

二维数组的初始化一般有四种情况。
1️⃣ 将数据写在一个大括号内,按照数组元素排列顺序给数组赋值。

int arr[2][3] = { 
   1,2,3,4,5,6}; 

如果大括号内的数据少于数组元素个数,系统会默认未被赋值的数组元素为0。

2️⃣ 为所有元素赋初值时,可以省略行下标,但不能省略列下标。

int arr[][3] = { 
   1,2,3,4,5,6}; 

3️⃣ 使用大括号{}将每一行数据放入一个大括号,内分行给数组元素赋值。

int arr[2][3] = { 
   { 
   1,2,3},{ 
   4,5,6}}; 

4️⃣ 直接对数组元素赋值。

int arr[2][3]; arr[0][0] = 1; arr[0][1] = 2; 

注意:不管使用哪种方法初始化二维数组,二维数组的列下标是不可以省略的。 int arr[2][ ]; ❌
在这里插入图片描述

2.3 二维数组的引用

二维数组元素的引用方式为“数组名[行下标][列下标]”,

int arr[2][3]={ 
   1,2,3,4,5,6}; arr[1][2];// 6 arr[2][3];//报错!数组下标越界 

同一维数组一样,我们在使用二维数组时也要注意不要超出下标范围。

2.4 二维数组在内存中的存储

我们可以遍历二维数组的地址。

int arr[2][3] = { 
    1,2,3,4,5,6 }; for (int i = 0; i < 2; i++) { 
    for (int j = 0; j < 3; j++) { 
    printf("arr[%d][%d] = %p\n", i, j, &arr[i][j]); } } 

在这里插入图片描述
在这里插入图片描述
对于二维数组我们可以将其看成是n个一维数组,n为行数。又图我们可以看出,每一行内部的每个元素都是相邻的,地址都是相差4个字节(int类型),跨行之间的元素(如:arr[0][2] 和arr[1][0])地址相差也是4个字节,由此我们可以推断出:

二维数组在内存中的存放方式也是连续

2.5 二维数组的应用

将矩阵行列对换。

int arr1[2][3] = { 
   1,2,3,4,5,6}; int arr2[3][2]; for(int i = 0;i<2;i++){ 
    for(int j = 0;j<3;j++){ 
    printf("%d ",arr1[i][j]); arr2[j][i]=arr1[i][j]; //通过行列互换使arr2为arr1的转置数组 } printf("\n"); } printf("\n"); for(int i = 0;i<3;i++){ 
    for(int j = 0;j<2;j++){ 
    printf("%d ",arr2[i][j]); } printf("\n"); } 

在这里插入图片描述
通过上述代码,我们很容易的将一个两行三列的矩阵转置成了三行两列的矩阵。


总结

C语言中除了一维数组和二维数组,还有多维数组。多维数组的声明和二维数组是一样的,只是下标更多而已。
arr[表达式1][表达式2]…[表达式n]。其用法和注意事项也是和二维数组一样的,多维数组在日常中使用很少,大部分还是一维和二维数组使用的比较多,所以这里就不再详细说明多维数组了。
数组方面的内容中还有数组的排序算法比较重要,数组的排序就放到下一篇文章中讲解。好了,以上就是关于C语言数组的知识,有什么问题或者文章哪里写的有不对的地方,欢迎评论区或私信告诉我。如果这篇文章对你有帮助的话请点赞收藏关注一下,感谢大家的支持~🌹🌹
在这里插入图片描述

今天的文章
c语言1维数组_数据结构c语言版第二版课后答案分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/80398.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注