二维数组_二维数组赋值 - CSDN
二维数组 订阅
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。 展开全文
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。
信息
适用领域范围
数组
表达式
a为3*4(3行4列)的数组
中文名
二维数组
实    质
float a[3][4],b[5][10]
二维数组定义
例如:float a[3][4],b[5][10];定义a为3*4(3行4列)的数组,b为5*10(5行10列)的数组。注意,不能写成float a[3,4],b[5,10];为便于理解特加入一个C语言程序及其运行结果:运行结果为(为便于观看,整理成表格):
收起全文
精华内容
参与话题
  • 二维数组

    千次阅读 2020-05-13 17:12:45
    二维数组 ** 定义二维数组 int [] [] scores;//定义二维数组 scores = new int [3][5];//分配内存空间 或者 int [] [] scores = new int [3][5]; 注:int [] [] scores = new int [][]; 这样写是错误的必须给二维...

    **

    二维数组

    **
    定义二维数组
    int [] [] scores;//定义二维数组
    scores = new int [3][5];//分配内存空间
    或者
    int [] [] scores = new int [3][5];

    注:int [] [] scores = new int [][]; 这样写是错误的必须给二维数组分配内存空间 第一个括号是给二维数组分配内存空间的

    定义二维数组并赋值

    写法一:在这里插入图片描述
    写法二:
    在这里插入图片描述

    二维数组与内存
    int [][] score = new int[3][5];在这里插入图片描述

    冒泡排序
    每次比较相邻两数 小的交换在前面 每轮结束后最大的在交换到最后
    冒泡排序口诀(升序)
    N个数字来排队
    两两相比小靠前
    外层循环N-1
    内层循环N-1-i

    使用Arrays类的各种方法
    使用前加载 java.untin.Array包

    Array.sort(数组名) 对数组里面的元素进行升序排序
    注意:不能够对boolean类型的数组进行排序。

    Arrays.binarySearch() 查找某个元素在数组中的位置(数组一定是升序排列的数组)

    Arrays.toString() 将数组转为字符串

    Arrays.equals方法比较两个数组是否相等(这两个数组同一个类型的)
    如果两个数组相等返回值是true,否则返回值是false
    两个数组相等的含义: (1)长度要相等 (2)数组中每个位上的元素值要相等

    Arrays.fill(array,val) 把数组array所有元素都赋值为val

    Arrays.copyOf 将原数组中的元素拷贝到新的数组中。
    如果新的数组的长度大于原数组的长度,那么新数组中超出的元素的值是数组的默认值。
    如果新的数组的长度小于原数组的长度,那么新数组中只保留对应位置上的元素值。

    展开全文
  • 二维数组简介与使用

    千次阅读 2018-06-07 22:36:16
    前言本文将探讨一下关于二维数组在内存中的存储和二维数组在参数传递时的使用。一、二维数组在内存中的存储如果定义一个这样的二维数组int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};则其在内存中的表示可能...

    前言

    本文将探讨一下关于二维数组在内存中的存储和二维数组在参数传递时的使用。

    一、二维数组在内存中的存储

    如果定义一个这样的二维数组int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};则其在内存中的表示可能下面这样的。

    由上图可以看出,在内存中二维数组是按照行主序进行存储的,从内存的角度上看,二维数组本质就是一个一维数组。如果把二维数组的每一行看成一个整体,即看成一个数组中的一个元素,那么整个二维数组就是一个一维数组。而二维数组的名字代表二维数组第0行的首地址(注意它是代表一行元素的首地址,而不是第0行第0列元素的首地址,虽然是相等的,但不能这么理解,所以在没有强制转换的情况下,二维数据要么通过行指针进行参数传递,要么通过二维指针进行参数传递)

    二、二维数组在参数传递时的使用

    1、 可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:

         void Func(int array[3][10]);

         void Func(int array[][10]);

         但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:

          如 void Func(int array[3][]);

     因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(行主序),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行,多少列,不能只指定一维而不指定第二维。

    2、将二维数组作为指针进行参数传递

    (1)直接作为行指针(数组指针)来传递参数(二维数组的名字代表二维数组第0行的首地址

    复制代码
     1 #include "stdafx.h"
     2 #include<iostream>
     3 using namespace std;
     4 
     5 void test(int (*a)[4],int m,int n)
     6 {
     7     cout<<*(*(a+m)+n);
     8 }
     9 
    10 int _tmain(int argc, _TCHAR* argv[])
    11 {
    12     int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
    13     test(a,1,1);
    14     return 0;
    15 }
    复制代码

    上述程序中int (*a)[4],可以理解为二维数组的行指针(这个指针指向二维数组的行,而每一行最多有4列),a[n]表示二维数组的第n行,所以cout<<*(*(a+m)+n);先定位出a数组的第m行的位置,然后再求出第m行第n列的值

    (2)参数传递时将二维数组的强制转换为一维指针,然后按照内存中存储的方法计算二维数组对应成一维数组的下标

    复制代码
     1 #include "stdafx.h"
     2 #include<iostream>
     3 using namespace std;
     4 void test(int *a,int row,int column,int m,int n)
     5 {
     6     cout<<a[m*column+n];
     7 }
     8 
     9 int _tmain(int argc, _TCHAR* argv[])
    10 {
    11     int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
    12     test((int*)a,3,4,1,1);
    13     return 0;
    14 }
    复制代码

    注意参数传递时将二维数组的强制转换为一维指针,如上述程序中的第12行

     

    注意:切不可将二维数组直接转换成二维指针作为形参传递,因为在这样子函数中不知道每一个一维元素含有多少个二维元素。

    如,下面这样写就是错误的:

    复制代码
    #include<iostream>
    using namespace std;
    void test(int **a,int m,int n)
    {
        cout<<*(*(a+m)+n);
    } 
    int main()
    {
         int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
    
         test((int **)a,1,1);
         return 0;
     }
    复制代码

    展开全文
  • 数据结构---二维数组

    千次阅读 2018-08-24 10:02:54
    1、二维数组 定义:二维数组可以看做是特殊的一维数组,可以用于存储一维数组 二维数组定义方式:  1)数组类型[][] 数组名 = new 数组类型[一维数组的个数][每一个一维数组中元素的个数];  例:int[][] ...

    1、二维数组

    定义:二维数组可以看做是特殊的一维数组,可以用于存储一维数组

    二维数组定义方式:

                 1)数组类型[][]   数组名 = new   数组类型[一维数组的个数][每一个一维数组中元素的个数];

                          例:int[][]   arr=new   int[3][4];

                                 int[][]    arr=new   int[][]{{1,2,3,4},{5,6,7,8},{2,3,4,5}};//数组的初始化

    二维数组的长度表示:

                  a.length表示一维数组的个数,即二维数组的行数

                  a[0].length表示每个一维数组的个数,即二维数组第一行的列数

    Arrays的用法:

                  遍历: toString()    将数组的元素以字符串的形式返回

                  排序: sort()        将数组按照升序排列

                  查找: binarySearch()在指定数组中查找指定元素,返回元素的索引,如果没有找到返回(-插入点-1) 注意:使用查找的功能的时候,数组一定要先排序。

     

    二维数组内存空间:

     

    二维数组内存空间分配如图所示:int   cars[][]、int   names[][]、int   computers[][]    

    Java数组及其内存分配

    展开全文
  • C/C++二维数组总结

    千次阅读 2019-04-29 21:34:57
    1、关于定义二维数组 先说在前面,一般的我们说的C/C++中的二维数组是定义在栈中的二维数组。比如定义了一个array[3][4],那就指的是定义了一个三行四列的矩阵形状的二维数组,如下图所示。这样的矩阵在内存中是以...

    1、关于定义二维数组

    先说在前面,一般的我们说的C/C++中的二维数组是定义在栈中的二维数组。比如定义了一个array[3][4],那就指的是定义了一个三行四列的矩阵形状的二维数组,如下图所示。这样的矩阵在内存中是以箭头右边的方式存放的,也就是说实际上我们定义的二维数组在内存中仍然像是一维数组那样连续存储的。可以想象为把一个矩阵一层层伸展铺平。

    因此可以使用如下方法定义二维数组:

    方法一: 直接确定二维数组的行和列数

    /* 可以使用下面的方法来初始化二维数组
     * 也就是直接将二维数组铺平,写成一维数组的形式
     */
    int array[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    
    /* 可以使用标准的二维数组的初始化方式
     */
    int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

    方法二: 不用指明二维数组的行数,但要指明列数

    下面的一种写法本质上是定义了一个数组指针

    /* 经典的写法
     */
    int array[][4];
    
    /* 一种更帅的写法,本质上是定义了一个数组指针
     */
    int (*array)[4];

    方法三: 动态分配的方式,这种写法比较灵活,在定义的时候不需要指明二维矩阵的行数和列数

    /* 使用动态分配内存的形式,用malloc
     */
    int **array // array[M][N]
    array = (int **)malloc(M * sizeof(int *));
    for(int i = 0; i < M; i++) {
        array[i] = (int *)malloc(N * sizeof(int));
    }
    
    // 释放
    for(int i = 0; i < M; i++)
        free(array[i]);
    free(array);
    
    /* 使用动态分配内存的形式,用new
     */
    int **array // array[M][N]
    array = new int*[M];
    for(int i = 0; i < M; i++) {
        array[i] = new int[N];
    }
    
    // 释放
    for(int i = 0; i < M; i++) 
        delete [] array[i];
    delete [] array;
    
    

    不过按照这种形式实现的二维数组本质上已经不是我们之前说的传统的二维数组 了,采用此种方法定义的二维数组的结构如下图所示,这样的二维数组在堆上分配内存。也就是说这样实现的二维数组本质上已经是指针数组了。使用这样的方式分配二维数组空间之后,可以使用array[i][j]进行数组的读写操作没有问题,但是应该知道不同行的内存空间不一定连续。这是因为每一行的数组的内存都是使用malloc分配的,多次使用malloc分配的内存空间并不一定是连续的,这与在栈上分配的二维矩阵有着根本的不同,比如同样的对于顶底的二维数组array[3][4],不能再使用array[0][4]来访问array[1][0]了,这样会导致地址越界,就是因为地址不一定连续了。

     2 、二维数组的传参写法

    使用二维数组作为参数,可以有以下几种写法。

    1 使用动态分配内存的方式申请空间,可以使用**传递参数

    希望在使用二维数组的时候保持良好的编程习惯,使用哪种方法定义的就使用哪种方式传参,这样对于保持良好的编码习惯有好处,对于别人阅读你的代码也有好处。

    #include <iostream>
    using namespace std;
    
    int func1(int **arr) {
    	cout << arr[0][0];
    	arr[0][2] = 20;
    	return 0;
    }
    
    int main()
    {
    	int **array
    	int row = 3;
    	int col = 4;
    	array = (int **)malloc(row * sizeof(int *));
    	for (int i = 0; i < row; i++) {
    		array[i] = (int *)malloc(col * sizeof(int));
    	}
    	memset(*array, 0, sizeof(int)*row*col);
    
    	array[0][1] = 100;
    	func1(array);
    	cout << array[0][2];
    	return 0;
    }

    2 使用二维数组的传统定义方法传递参数

    如果把数组名作为函数的参数的话,在编译的时候这个数组参数会自动退化为指针,因此以下两种写法虽然不同,但在编译之后是一样的,数组会退化成数组指针。

    #include <iostream>
    using namespace std;
    
    /*
     * 以下两种写法本质上是一样的
     */
    int func1(int (*arr)[4]) {
    	cout << arr[0][0] << endl;
    	arr[0][2] = 20;
    	return 0;
    }
    
    int func2(int arr[][4]) {
    	cout << arr[0][0] << endl;
    	arr[0][2] = 20;
    	return 0;
    }
    
    int main()
    {
    	int array[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
    
    	array[0][1] = 100;
    	func1(array);
    	cout << array[0][2] << endl;
    	return 0;
    }

    正是因为这个问题,在定义如下类似求数组大小的函数的时候必须将数组引用传递!否则数组会退化为一个指针,无法正确的使用sizeof运算符求出数组a所占内存空间大小。

    template<class T>
    int GetArrayLen(T& a)
    {
        return sizeof(a)/sizeof(a[0]);
    }

     

    展开全文
  • 二维数组与指针、指针数组、数组指针的用法

    万次阅读 多人点赞 2018-03-13 17:35:56
    二维数组和指针⑴ 用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个...
  • 正确定义二维数组

    千次阅读 2019-06-24 16:23:17
    二维数组进行正确初始化 二维数组必须指定列的数量,行的数量可以不定义即可以省略第一维的定义,但不能省略第二维的定义 1.分行进行初始化 int a[2][3] = {{1,2,3},{4,5,6}}; 在{}内部再用{}把各行分分开,第0行...
  • 二维数组二维数组

    千次阅读 2018-06-26 05:52:36
    二维数组二维数组名   对于一位数组我们认识到其数据元素在内存中是按线性顺序依次排列的,且一维数组名的值是一个指针常量。那么二维数组在内存中又是怎么存储的,其数组名又有什么含义呢?   定义一个二维...
  • PHP 如何把二维数组变为 一维数组

    万次阅读 2018-05-30 17:41:58
     返回数组中某一个单一列的值。这个方法 得益于 PHP 内部的使用方法 array_column($array,column_key,index_key) 版本 5.5 +array 必需。规定要使用的多维数组(记录集)。column_key :必需。需要返回值的列。 ....
  • C语言中一维数组与二维数组的比较

    万次阅读 2018-09-07 13:50:12
    C语言中一维数组与二维数组的比较: 从效率上讲: 一维数组访问一个数据时,只需要查找与数组元素对应的地址,通过地址匹配到目标元素。 二维数组则需要先找到目标元素数组的地址,匹配到目标元素数组,然后再...
  • C语言:二维数组及其定义

    万次阅读 多人点赞 2017-09-12 16:27:52
    知识总结: (1)二维数组的主要用途: (2)定义二维数组 (3)二位数组的初始化 (4)定义缺行的二维数组 (5)定义和初始化二维字符数组
  • python 一维数组变为二维数组

    万次阅读 2019-07-10 11:29:24
    a1=[] a2=[] a1.append(a2)
  • python中比如我的一个list=['a,b,c,d','e,f,g,h','i,j,k,l']想要变成list2=[[a,b,c,d],[e,f,g,h],[i,j,k,l]]该怎么写代码,求大神指点
  • C++中创建二维数组的四种方法

    万次阅读 多人点赞 2018-08-14 14:01:39
    使用一维数组模型二维数组 静态二维数组 动态二维数组 利用vector创建二维数组 #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int rows=2,columns=3; 使用一维...
  • python 二维数组转一维数组

    万次阅读 2020-04-10 15:50:27
    import operator from functools import reduce a = [[1,2,3], [4,6], [7,8,9,8]] print(reduce(operator.add, a)) >>> [1, 2, 3, 4, 6, 7, 8, 9, 8]
  • 一维数组转化为二维数组(java)

    万次阅读 2017-05-02 10:14:43
    由于经常在使用矩阵进行计算时,会首先将一维数组转为二维数组。因此,在这里记录一下,也希望对他人有帮助。package deal; /* * author:合肥工业大学 管院学院 钱洋 *1563178220@qq.com */ public class ...
  • C语言之二维数组在函数中的调用问题

    万次阅读 多人点赞 2018-05-25 15:48:42
    之前在学习二维数组的时候感觉理解起来很简单,所以理解一下就过去了,但是当自己真正的去用二维数组数组解决一些问题(特别是在函数调用二维数组的过程中)才真正发现原来使用起来还是要去注意一些细节的。...
  • 一维数组与二维数组的区别

    千次阅读 2019-02-27 11:34:26
    一维数组的定义: 当数组中每个元素都只带有一个下标时,称这样的数组为一维...二维数组本质上是以数组作为数组元素的数组,即“数组的数组” 举例:a(2,2) 他表示的数组集合为: a(0,0),a(0,1)a(0,2) a(1,...
  • Java获取二维数组行列长度

    万次阅读 多人点赞 2019-09-30 11:28:28
    二维数组int array[][] = new int[3][3]; 行长度:array.length 列长度:array[i].length class Test{ for(int i = 0; i ; i++){ for(int j = 0; j [i].length; j++){ } } }
  • 二维数组某一列的值

    万次阅读 2018-11-01 17:31:19
    arr = [[1,2],[3,4],[5,6]] v = [x[0] for x in arr] #第一列
  • 二维数组所有元素初始化为0

    万次阅读 2017-11-08 14:49:15
    一、初始化;char a[3][3]={0}; 、  1.char a[3][3];  2.memset(a,0,sizeof(a)); 三、如果是动态分配内存方式构建数组的话,把malloc函数改用成calloc函数。
1 2 3 4 5 ... 20
收藏数 361,393
精华内容 144,557
关键字:

二维数组