二维数组---C语言(行列抽象思维)

这篇具有很好参考价值的文章主要介绍了二维数组---C语言(行列抽象思维)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言:

1.数组

1.1数组的初始化

1.2数组的访问方法

2.二维数组

2.1二维数组的创建和初始化

2.2二维数组的访问

2.3内存中的二维数组


❤博主CSDN:啊苏要学习

  ▶专栏分类:C语言◀

  C语言的学习,是为我们今后学习其它语言打好基础,C生万物!

  开始我们的C语言之旅吧!✈


前言:

  在学习完函数一章,我们接着来学习C语言中很重要的表示数据的一种形式---数组。

1.数组

  数组,顾名思义就是一组数据的集合,数据里的元素有一个共同特征,那就是同属于一种数据类型

  当我们想要使用多个整型的时候,一个一个整型变量的创建是比较麻烦的。比如:

int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    int e = 0;
    return 0;
}

  这样不仅代码看上去很长,而且也不好看。我们创建数组来表示同一种数据类型的多个值

int main()
{
    //创建一个整型数组,数组有五个元素,每个元素是整型。
    int arr[5] = {1,2,3,4,5};
    return 0;
}

1.1数组的初始化

  数组的初始化,大家可能要问,为什么要初始化?我一开始也不知道要给数组初始化什么值,这里我想告诉大家的是:不知道初始化什么值没关系,我们给它初始化个0就好了嘛,至少我们还知道这个数组里的值是0如果没有进行初始化,那数组里的值将会是随机值(俗称垃圾值),所以我们养成初始化的好习惯是有必要的

  • 完全初始化
int main()
{
    //完全初始化,将每个元素都初始化到了
    int arr[5] = {1,2,3,4,5};//初始化的时候,用{}括住,给数组的对应元素赋值
    //第一个元素初始化为1,第二个元素初始化为2,依次类推
    return 0;
}
  • 未完全初始化
#include <stdio.h>

int main()
{
    //只有第一个元素被初始化为了0
    int arr[5] = {0};
    //注意:数组未完全初始化,编译器会自动给数组没有初始化的元素初始化为0
    //所以这个数组第一个元素是我们初始为0,剩下的四个元素是编译器初始化为0
    return 0;
}

  元素个数可以省略,但初始化内容一定要写,元素个数会根据初始化内容定;初始化可以内容省略,但元素个数一定要写,此时相当于没有初始化数组

1.2数组的访问方法

  现在我们已经会创建数组了,那如何使用数组呢?我们引入下标操作符来访问数组中的元素。

二维数组---C语言(行列抽象思维)

  arr[0]是数组的首元素数据1,这里的知识点是数组的下标从0开始,arr[6]等于7,元素7的下标是6我们仔细观察,数组一共有7个元素:1、2、3.......,然后最后一个元素的下标是元素个数减1

  计算元素个数的方法:数组的大小/数组一个元素的大小

二维数组---C语言(行列抽象思维)

  一个整型的占用的空间是4个字节,数组里有7个元素,所以整个数组的大小是28个字节

  我们思考着:一个整型是4个字节,7个整型算起来是28个字节。那是不是说明在这个数组的中间没有其它未被利用的空间呢?也就是说,数组里的每个元素都是连在一起的,一个元素挨着一个元素。如果一个元素与另一个元素之间有空间未被使用,那数组占用的空间大小肯定不止28咯

  是的,数组还有一个特点,数组里的元素是连续存放的我们知道每个内存单元都有一个地址编号,一个内存单元是1个字节的大小,我们不妨打印数组所有元素的地址出来看看是不是一串连续的地址编号

二维数组---C语言(行列抽象思维)

  &是取地址操作符,%p第打印地址的格式设置我们看到首元素的地址是98,说明第一个元素的地址是从98开始,以及后面的99、9A、9B这四个内存单元存放一个整型(四个字节大小,每个内存单元一个字节),第二个元素arr[1]的地址开始是9C,恰好衔接着前一个整型元素的后面,后面的其它元素都是这种情况

二维数组---C语言(行列抽象思维)

  arr[1]存放在9C、9D、9E、9F这四个内存单元中,很明显,数组元素是连续存储的

2.二维数组

  二维数组,其实就是以一维数组为数组元素的一个一维数组。看完下面的内容后,相信读者会感悟到二维数组的多种理解方式的。

2.1二维数组的创建和初始化

  • 完全初始化
int main()
{
    //创建了一个3行4列的二维数组
    int arr[3][4] = {{1,2,3,4},{2,3,4,5},{3,4,5,6}};
    //完全初始化,十二个元素都有初始化
    return 0;
}

二维数组---C语言(行列抽象思维)

  • 未全初始化
int main()
{
    int arr[][3] = {{1,2},{1,3},{4,5,6}};
    //二维数组可以省略数组的行数,但列数不能省略。
    //函数会根据初始化内容自动计算的。
    return 0;
}

  第一行、第二行我们只初始化了两列,第三列没有初始化只要有初始化,未被初始化的余下的元素都会被编译器初始化为0

2.2二维数组的访问

  和一维数组一样,访问二维数组也是用下标的方式,我们来看下面的代码吧~

 

二维数组---C语言(行列抽象思维)

  当i等于0的时候,随着j从0到3增长(因为j<4,最多到3),打印出一行。是arr[0]这一行的所有元素,j的for循环遍历完后,i++来到arr[1]也就是第二行,这一就能遍历所有元素了。

  对于二维数组,行和列的下标也都是从0开始的。

二维数组---C语言(行列抽象思维)

  我们前面说到,arr是一个存放一维数组的一个数组,那么arr[0]表示二维数组的首元素,也就是arr[0]这一行数组,arr[0][0]表示第一行数组的第一个元素

  补充:数组名[下标]访问元素,那么这里arr[0]我们就可以理解成第一行数据的数组名,我们可以使用数组名arr[0],再加下标访问这个数组里的元素。arr[0][0]、arr[0][1]、arr[0][2]、arr[0][3]这样子。

  总结:二维数组的元素是一维数组,一维数组里的元素个数与列相同;也可以这样理解int arr[3][4],arr[3]表明这个数组有三个元素,每个元素的类型是int[4]这样的一个一维数组,int a[5];这样的a数组,类型是int[5]。

  以上是行列式的理解,我们看看二维数组在内存中真正存储的样子。

2.3内存中的二维数组

二维数组---C语言(行列抽象思维)

   数组的初始化可以直接罗列出来,1、2、3这三个元素放满第一行后就会到第二行上放数据

  看到第一行元素的地址,与第二行元素的地址都是紧紧凑在一块的。我们知道,它在内存中,也是连续存储也,不像是我们所说的行和列的样子,实际上应是下面这个样子:

二维数组---C语言(行列抽象思维)

  这些行不像我们想象的那样分一行一行的是一条直线存储着的,但我们可以用行列式理解二维数组是完全没问题的。

  遍历二维数组的时候,通过需要用两层for循环,一层表示行,一层表示列,在行不变的情况下,让列走完,然后行+1,再让列走完这一行,直到达到条件。

  补充:为什么省略行可以,而省略列不行,我们可以从两个角度来理解:第一就是我们在创建一个数组的时候,这个数组的元素类型要明确,不能是不清楚的,比如int arr[][4],int[4]是数组的元素类型,一个元素占用四个整型的空间大小,有多少个元素我根据初始化内容定,和一维数组一样int arr[] = {1,2,3};第二就是当我们省略行的时候,并没有影响一次开辟行空间的大小,影响一行开辟空间大小的是列。当列为整型二维数组列为4,一行就是16个字节,为5,一行就为20个字节

  到这里数组的最最最简单的内容就讲完啦,下面我们将使用数组的知识,搞个三子棋和扫雷小游戏,敬请期待~


结语:希望读者读完有所收获!在学C的路上,祝福我们能越来越C!✔

  读者对本文不理解的地方,或是发现文章在内容上有误等,请在下方评论区留言告诉博主哟~,也可以对博主提出一些文章改进的建议,感激不尽!最后的最后!

  ❤求点赞,求关注,你的点赞是我更新的动力,一起努力进步吧。文章来源地址https://www.toymoban.com/news/detail-462779.html

到了这里,关于二维数组---C语言(行列抽象思维)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言中一维数组及二维数组的运用

    int * p  = arr; int * q = arr[1]; 其中arr是数组名,代表了整个数组的首元素地址,这个是一个常量,放在常量存储区,所以在给int*p赋值的时候可以不用带,而下面的arr[1]则代表数组里的某一个元素,所以在赋值时要加上  有个例题: 下列运行结果  解析:首先看main函数里的第二

    2024年02月13日
    浏览(46)
  • C语言指向二维数组的四种指针以及动态分配二维数组的五种方式

    当二维数组作为结构成员或返回值时,通常需要根据用户传递的参数来决定二维数组的大小,此时就需要动态分配二维数组。 如果现在有一个二维数组 a[3][2] ,那么将有以下几种指针可以指向它: 方式一 方式二: 在应用场景中通常采用以下三种方式动态分配二维数组,因为

    2024年02月04日
    浏览(56)
  • C语言第九弹---二维数组

     ✨ 个人主页:   熬夜学编程的小林 💗 系列专栏:   【C语言详解】   【数据结构详解】 二维数组 1、二维数组的创建 1.1、二维数组的概念 ​编辑1.2、⼆维数组的创建 2、二维数组的初始化 2.1、不完全初始化 ​2.2、完全初始化 ​2.3、按照行初始化 ​2.4、初始化时省略行

    2024年02月21日
    浏览(69)
  • C语言 : 矩阵转置 (二维数组)

    输入N*N的矩阵,输出它的转置矩阵。矩阵的转置操作,即把矩阵的行元素变为列元素、列元素变为行元素的过程。    第一行为整数N,接着是一个N*N的矩阵。 转置矩阵。 输入样例 1 输出样例 1 解题思路: 输入二维数组。(用到for循环) 将二维数组的行与列互换。(需要两

    2024年01月21日
    浏览(48)
  • C语言例题(二维数组)【转置矩阵】【成绩登记】【斐波那契】【简单矩阵查找】【螺旋数阵】【一维数组转二维数组】

    例一:转置矩阵 程序: 输出:通过b[j][i] = a[i][j];这一步实现了转置 进阶:用6个1~20内的随机数按行的顺序生成一个a[2][3]的矩阵,并输出它的转置矩阵 输出: 例2.登记某班三人的数学、英语两门课程的成绩。 分析:此类问题可以通过使用3个一维数组来解决,也可以通过使用

    2024年02月03日
    浏览(45)
  • 《C语言深度解剖》(4):深入理解一维数组和二维数组

    🤡博客主页:醉竺 🥰 本文专栏: 《C语言深度解剖》 😻 欢迎关注: 感谢大家的点赞评论+关注,祝您学有所成! ✨✨💜💛想要学习更多 数据结构与算法 点击专栏链接查看💛💜✨✨   数组是一组相同类型元素的集合。 数组的创建方式:  数组创建的实例:  注:数组

    2024年04月09日
    浏览(82)
  • C语言二维数组的初始化

    二维数组的初始化可以按行分段赋值,也可按行连续赋值。 例如,对于数组 a[5][3],按行分段赋值应该写作: int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}}; 其中,花括号的对数代表行数,方括号中的值的个数代表列数。 按行连续赋值应该写作: int a[5][3]={80,75,92,61,6

    2024年02月04日
    浏览(47)
  • C语言 查找二维数组的鞍点

    出具有m行n列二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1=m,n=10。同一行和同一列没有相同的数。要求:     1)输入m和n,输入格式m*n;     2)输入m行每行n个整数。     3)查找鞍点。     4)如果找到鞍点,则输出该元素所在行、列和值,

    2024年02月05日
    浏览(60)
  • C语言中函数返回数组(一维和二维)

    C语言中函数返回数组是很重要的一种应用,有时候在程序中调用函数返回数组可以更容易的实现我们想要的某些操作,比如一次返回多个值,这篇文章带来的是C语言中函数返回一维数组和二维数组的例子。 函数返回一维数组中需要注意的是:定义函数时需要在函数类型的后

    2024年02月04日
    浏览(48)
  • 【C语言基础入门】二级指针、一维数组与指针、二维数组与指针

    在学习C语言的过程中,理解指针的概念是非常重要的。指针提供了一种直接访问内存地址的方式,使得我们可以更加灵活地管理数据和内存。在本文中,我们将介绍C语言中的二级指针、一维数组与指针,并通过通俗易懂的语言和示例代码来帮助读者理解这些概念。 二级指针

    2024年02月05日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包