首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C语言】带你玩转数组(全程高能)

所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。...我们通过一道题看一下究竟是怎么回事: 在这里,可怕的是编译器并没有报错,它还随机打印出一个值出来,对于数组越界的问题我们一定要多加注意啊! 同时,对于二维数组来说,二维数组的行和列也可能存在越界。...第一个[]为行,第二个[]为列,比如第一个arr就是3行4列 初始化 我们可以在创建的过程中就对其赋值,完成初始化,通过调试监视窗口,让我们来看看此时数组内容是什么: 我们可以知道:1.在初始化的过程中...好啦,接下来基于一维数组的理解上,二维数组的使用对于我们并不是什么难事了,直接来看看我们的代码练习一下: 我们可以看到打印出来的结果只有一行,这时候可能有人会问了,怎么打印出类似矩阵的效果呢?...看,这样打印出来的效果是不是好多了,区别在于%-2d,向左边对齐,如果是%2d就是向右边对齐,这里我就不演示了,可以自己去试一试。

53640

C语言(4)----数组

·一维数组 它是最基本的数组,格式就是type arr_name[常量值] ·二维数组 它的格式是type arr_name[常量值1][常量值2] 看到这,我认为二维数组又很像数学的里的坐标系。...我们注意到,上面介绍数组的各个概念时,都是以一维数组为例,那么二维数组在这些概念上和一维有什么不同呢? 假设我们将二维数组就看作是坐标系,那么常量值1就相当于行,常量值2就相当于列。...从图中我们可以看到,假设arr[3][5],那么代表就是第三行第五列那个元素。 二维数组的初始化 二维数组的初始化和一维稍有些不同。...按照行初始化:当我们需要按照行初始化时,可以在大括号中加入小括号来表示小括号的个数代表行数,小括号中的数字代表打印的东西。 注意:二维数组的初始化可以省略行但不能省略列。...因为列用来决定每一行能放几个元素,如果没有列的话,那么行也就不存在了。 二维数组的下标 和一维数组一样,二维数组的下标也是从0开始的,所以行和列都是从0开始。所以第3行第2列指的并不是4而是6。

6410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言数组(1)

    看代码: 计算数组元素个数的方法 // ## // 1.4一维数组在内存中的存储 我们要看它在内存中的存储 探究它内存中的布局 只要把每个元素的地址打印出来 就能够探究清楚它的一个布局...二、二维数组的创建和初始化 2.1二维数组的创建 & 初始化 2.2 二维数组的使用 2.3 二维数组在内存中的存储 像一堆数组一样,这里我们尝试打印二维数组的每个元素 二维数组在内存中也是连续存放的...为什么二维数组的 行 可以省略 列 不可以省略。...数组的下标规定是从零开始的,如果数组有n个元素,最后一个元素的下标就是 n-1. 所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。...C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不会报错,并不意味着程序就是正确的 所以程序员写代码时,最好自己做越界的检查。 二维数组的行和列也可能存在越界

    15110

    认识一维数组与二维数组

    arr[9][10]; int arr[][10]; 我们 把它读为3行10列,其中行可以省略(不会报错),而列不可以省略; 如果缺少列会报错:“缺少下标”程序无法运行"; 缺少行则不会报错;...};//省略行的定义的二维数组(行可以省略,列不可以省略) 1.我们用一维数组的探索方法来看看二维数组的存储是怎么样的,是否可以运行 ; 在监视窗口我们可以发现 1.data数组的元素是根据行和列的来进行排列的...printf("%d\n",arr[1][2]); 欸嘿,也许你会认为了,这打印的一定就是1行3列的那个数字 stop!!! stop!!! stop!!! 还记得数组的下标从0开始吗?...所以 [1][2] 对应的其实是2行3列 我们可以画下图看一下 0 1 2 3 4 横标 0 1 2 竖标 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 数组元素 故打印第二行第4...列(标红的数字) 2.二维数组的输入与输出 二维数组的输入讲解:因为二维数组是输入的时候需要两个值(行,列)确定数组具体储存到哪里。

    15510

    抽丝剥茧C语言(中阶)数组

    [3][4] = {{1,2},{4,5}}; int arr3[][4] = {{2,3},{4,5}};//二维数组如果有初始化,行可以省略,列不能省略 int arr4[][4] = {1,2,3,4,5,6...红色的数数组下标,蓝色的是数组的元素。 大家可以这么理解,二维数组的第一个[下标]里面是访问行,第二个[下标]访问的是列。 如你所见,想访问6这个元素就要arr[1][1]。...至于arr2我们发现,第一行初始化了1和2,后面的是默认值为0,0因为这一行需要4个元素,一共有4列,第二行初始化了4和5,然后0,0,最后一行全是0,这是因为那个花括号,花括号代表一行,就相当于集合一样...arr4发现花括号也没有了,不要紧,有列,你知道了一行有4个元素,这里有6个元素,那么可以凑够两行,第二行元素不够不要紧,0来凑数。 2.3 二维数组的使用 二维数组的使用也是通过下标的方式。...所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。

    58300

    计算机初级选手的成长历程——三子棋详解

    现在我们的思考方式不能被三子棋这个内容给局限起来,如果说我想下五子棋我是不是还要定义一个char board[5][5]的二维数组呢?...如果以后我们需要修改与行和列的数值,我们只需要在头文件中更改即可,就不需要在代码中将行和列的数值一个一个修改过去,这样大大提高了编码效率。...,这个棋盘内容可不能像前面用几个printf就解决了,我们希望的是通过修改我们的行和列,棋盘也能跟着修改,所以在打印的时候我们就需要借助循环来实现。...我们有几种方式可供选择——1.一将内容行一行的打印出来,2.将内容按行和列的方式打印出来。...,将它的行和列组合起来一起分析,我们可以得到以下信息: 第一行是由 %c 加上|这个内容组成; 第二行是由----加上|这个内容组成; 第一行的 %c 的个数与数组列数相同,而|的个数比列数少1; 第二行的

    63220

    2024重生之回溯数据结构与算法系列学习(11)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】

    PrintTwoDim 和 PrintOneDim 函数用于分别打印二维和一维数组的内容。...目的是将二维数组的所有元素按行存储到一维数组中。 使用嵌套循环逐行逐列遍历二维数组,将每个元素赋值给一维数组。...OneDimIndex 函数: 输入参数:一维数组 array 和索引 i, j(表示二维数组的行和列)。 目的是根据给定的行列索引计算在一维数组中的位置,并返回该位置的值。...目的是打印整个二维数组,每个元素之间用制表符分隔,行末换行。 PrintOneDim 函数: 输入参数:一维数组 arr 和元素个数 n。...根据索引从一维数组获取值: OneDimIndex 函数根据行和列的索引计算出在一维数组中的位置,并返回该位置的值。

    9910

    快速学习Java的多维数组技巧

    :  此代码定义了一个名为array的二维数组,它有3行和4列。...可以使用以下方式来访问二维数组的元素:array0代表第一个元素,它位于第一行第一列array1代表第七个元素,它位于第二行第三列array2代表第十二个元素,它位于第三行第四列  可以通过使用循环来遍历整个数组...然后,访问了该数组的第2行第3列的元素,并将其赋值给变量val。注意,二维数组的行和列都是从0开始计数的,因此array1表示的是第2行第3列的元素。...在 main 方法中,先定义了一个 3 行 4 列的二维数组 array,并且分别给每个位置赋值。然后使用嵌套循环遍历整个二维数组,并将每个位置的值打印出来。  ...同时,读者也需要注意多维数组的缺点,避免造成内存浪费和复杂的访问操作。... ...文末好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。...

    20221

    70个NumPy练习:在Python下一举搞定机器学习矩阵运算

    输入: 输出: 答案: 16.如何交换2维numpy数组中的两个列? 难度:2 问题:交换数组arr中的第1列和第2列。 答案: 17.如何交换2维numpy数组中的两个行?...难度:2 问题:在数组arr中交换第1行和第2行。 答案: 18.如何反转2维数组的行? 难度:2 问题:反转二维数组arr的行。 答案: 19.如何反转二维数组的列?...难度:3 问题:过滤具有petallength(第3列)> 1.5和sepallength(第1列)的iris_2d的行。 答案: 35.如何从numpy数组中删除包含缺失值的行?...难度:2 问题:将iris_2d的花瓣长度(第3列)组成一个文本数组,如果花瓣长度为: <3则为'小' 3-5则为'中' '> = 5则为'大' 答案: 41.如何从numpy数组的现有列创建一个新的列...输入: 输出: 其中,2和5是峰值7和6的位置。 答案: 64.如何从二维数组中减去一维数组,其中一维数组的每个元素都从相应的行中减去?

    20.7K42

    蛇形矩阵和矩阵转置

    从示例中我们可以看出由本来的2行3列经转置后变成了3行2列,且数组中元素的存放内存是连续的,其实转置只是一种视觉效果,数组中元素的内存没有发生改变,只是打印数组的时候呈现的转置的结果。...想要利用内存,我们就需要使用指针来处理, 我们知道数组名表示数组首元素的地址,而二维数组首元素的地址指的是第一行的地址,要想真正使用二维数组的第一个元素的地址,可以这样定义: int *p=&arr[0...通过监视我们发现1,2,3,4,5,6不是连续存储的,由于定义动态数组的方法是间接的,不能算的是完全意义上的动态数组,所以会出现这种情况。...上面这种打印方式不免有些复杂,且容易出错,下面介绍一种简单的方法: 只需将printf的部分改掉就行了,转置后行和列是相反的,那我们打印的时候行和列也是相反的不就行了,这张方法简洁易懂,且不易出错。...二.蛇形矩阵 1.问题呈现: 2.实现方法: 蛇形矩阵的第一行和最后一列与内部的元素关联性不是特别强,且内部元素的排列富有规律,所以我们先赋值第一行和最后一列,这很简单: int arr[20

    12710

    c语言之“数组”初级篇

    二、二维数组 2.1 二维数组创建 //数组创建 int arr[3][4];//创建一个3行4列的整形二维数组 char arr[3][5];//创建一个3行5列的整形二维数组 double arr[...2][4];//创建一个2行4列的浮点型形二维数组 2.2 二维数组的初始化 //数组初始化 int arr[3][4] = {1,2,3,4};//将第一行赋值1,2,3,4,其余行的数默认为0; /...] = {{2,3},{4,5}};//二维数组如果有初始化,行可以省略,列不能省略 注意:二维数组如果有初始化,行可以省略,列不能省略。...计算3阶行列式的值: 代码: #include int main() { int arr1[3][3];//创建一个三行三列的二维数组 int i = 0; printf("...比如:如果数组有n个元素,那么元素的下标范围是0到n-1; 所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。

    70730

    【C语言总集篇】数组篇——从不会到会的过程

    ,接下来我们来介绍一下二维数组; 二维数组的创建和初始化 1.二维数组的创建 1.1什么是二维数组 1.1.1个人理解 对于二维数组,我是这样理解的:一维就是一条线,二维就是一个面,那一维数组就是只有一行或者一列的数组...,而二维数组则是拥有行和列的数组。...1.2二维数组如何创建 既然我们理解的二维数组具有行和列,那我们就需要有两个下标来进行表示,如: //二维数组的创建 char a[1][2]; short b[1][2]; int c[1][2];...下面我们来测试一下,分别从省略行和列、省略行、省略列来进行探讨: 在省略行和列时,系统会报错说明a缺少下标,并在第二个中括号下面标注了一下; 我们在省略行时,代码成功编译,并且根据列的大小将元素划分成了两组...规定:数组的下标从0开始,如果有n个元素,最后一个元素的下标就是n-1。如果数组的下标小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。

    37310

    计算机小白的成长历程——数组(2)

    二维数组的创建和初始化 1.二维数组的创建 (1)什么是二维数组 个人理解 对于二维数组,我是这样理解的: 一维就是一条线,二维就是一个面,那一维数组就是只有一行或者一列的数组,而二维数组则是拥有行和列的数组...(2)二维数组如何创建 既然我们理解的二维数组具有行和列,那我们就需要有两个下标来进行表示,如: //二维数组的创建 char a[1][2]; short b[1][2]; int c[1][2];...那我能不能把1、2赋值给第一行的两个元素,把3、4赋值给第二行的两个元素呢?答案是可以的。...如图所示: 这里我是这么理解的,既然二维数组分行和列的话,通过元素的下标我们可以将行相同的元素看做一个整体,或者说看做一个一维数组也就是a0[3]和a1[3]两个数组,那我的二维数组我就可以写成a[2...二维数组的初始化,我相信各位朋友都了解了,接下来我们来看一下二维数组是如何使用的; 3.二维数组的使用 (1)通过下标访问元素 在一维数组中,我们尝试过通过下标来访问各个元素,并将元素打印出来,那在二维数组中又可以不可以呢

    25330

    C语言------数组

    i<sz 二维数组 数组的创建 概念 将一维数组作为数组的元素,就是二维数组 将二维数组作为数组的元素,就是三维数组 二维数组以上的被称为多维数组 type name[行][列] 数组名字根据自己需求定义...int date[3][5] = {1,2,3,4,5,6}; 改变如下: int date[3][5] = {{1,2},{3,4},{5,6}}; 因为二维数组里面的元素是一维数组 二维数组在初始化的时候行可以省略...,列不能省略 int date[][5] = {{1,2},{3,4},{5,6}}; 二位数组的使用 数组名是地址 c语言默认行和列默认从0开始的 int arr[3][5] = {1,2,3,4,5...= 0; i < 5; i++) { int j = 0; for (j = 0; j 行和列置换过来 {...else if (arr[mid] > k) { right = mid - 1;//如果下标是中间值所对应的数字大于要寻找的数字,那么下标右边的数字可以不用看了

    7810

    c语言进阶指南(1)(数组)

    **数组需要初始化后才能使用,初始化的方式如下**1)给出数组的大小且大于初始值设定个数int arr[5]={1,2,3};数组的初始化如下未给定具体初始值的部分由0成为初始值。...这样初始化是有问题的,因为无法正常读取字符串的结束标志('\0'),导致字符串的长度和内容不能得知!!...使用这个符号可以访问数组的元素int arr[7]={1,2,3,4,5,6,7}printf(“%d ”,arr[0]);//打印1printf(“%d ”,arr[1]);//打印2printf(“...三、二维数组三.(1)二维数组的声明与初始化二维数组的形式可以理解为设arri中,i是行,j是列。...p\n",i,j,&arr[i][j]); } }}得到的结果为:我们可以发现二维数组的地址存储方式与一维数组类似,根据行与列的顺序依次递增。

    20910

    C语言:数组-学习笔记(万字笔记)——翻新版

    特点: •数组中存放的是1个或者多个数据,但是数组元素个数不能为0 • 数组中存放的多个数据,类型是相同的。 1.2 为什么学习数组?...二维数组如果有初始化,行可以省略,列不能省略。 int arr[ ][4] = {{1,2},{3,4}}; 8....其实⼆维数组访问也是使⽤下标的形式的,⼆维数组是有行和列的,只要锁定了行和列就能唯⼀锁定 数组中的⼀个元素。...电子表格:类似于 Excel 中的表格数据,可以用二维数组表示行和列的数据。 4. 地图表示:将地图划分为网格,用二维数组存储每个网格的相关信息,如地形、资源等。 5....数组的下标规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是 n-1。 所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。

    13510

    把01背包问题的底裤扒个底朝天!!!

    能把完整的dp数组打印出来。...注意:这里初始化时都为0,相当于一开始是考虑0个物品,即无论当前背包容量是多少,我什么也不放进去,那么最大价值就是0 那么我假设物品价值都是大于0的,所以dp数组初始化的时候,都初始为0就可以了。...之前在01背包那篇文章也讲过,对于一维dp背包容量必须是从大到小,因为计算当前状态的值,用到的是上一行的正上方和左上方的值,并且是旧值,而非新值,如果从小到大遍历背包容量,那么新值会覆盖旧值,后面计算用到的就是新值...,相当于一件物品被重复放入,是完全背包的做法了 01背包问题原文链接 那么问题又来了,为什么二维dp数组遍历的时候不用倒叙呢?...所以一维dp数组的背包在遍历顺序上和二维其实是有很大差异的!

    32230

    【初级】C语言——数组

    二维数组的创建和初始化 2.1 二维数组的创建 // 数组创建 int arr [ 3 ][ 4 ];//三行四列 char arr [ 3 ][ 5 ]; double...arr [ 2 ][ 4 ];  2.2 二维数组的初始化 二维数组可以省略行,不能省略列 // 数组初始化 int arr [ 3 ][ 4 ] = { 1 , 2 ,...二维数组如果有初始化,行可以省略,列不能省略 2.3二维数组的使用  对二维数组的理解。  ...数组的下规定是从 0 开始的,如果数组有 n 个元素,最后一个元素的下标就是 n-1 。 所以数组的下标如果小于 0 ,或者大于 n-1 ,就是数组越界访问了,超出了数组合法空间的访问。...&数组名,这里的数组名表示整个数组,取出的是整个数组的地址 二维数组的数组名的理解: 二维数组的数组名也表示首元素的地址,但是表示的是第一行的地址。 三行四列:

    2.4K20
    领券