-
C++ 静态二维数组与new出来的动态二维数组,存储结构的差别
2017-08-26 16:44:471,静态二维数组存储结构是一段连续的内存,存储形式和以为数组一样。 类似用一维数组代替二维数组,如需要创建 aa[m][n]; 可以用一维数组代替为 bb[m*n] 使用时候元素 aa[i][j] 等于bb[i*n+j] 。定义二维数组...1,静态二维数组存储结构是一段连续的内存,存储形式和以为数组一样。
类似用一维数组代替二维数组,如需要创建 aa[m][n]; 可以用一维数组代替为 bb[m*n]
使用时候元素 aa[i][j] 等于bb[i*n+j] 。定义二维数组不过是系统做了 i*n+j运算来查找 i 行 j 列的元素。
有图可知,aa[1][0] 的地址与a[0]的地址相同。
int bb[9][9];
cout<<" &b[1]: "<<&bb[1]<<" &bb[1][0]: "<<&bb[1][0]<<endl;数组名bb的值就是元素bb[0][0]的地址,bb只能算是指向变量的指针,也就是一级指针,
所以运算 int **p=bb; 会出错,
只能用一级行指针代替这个运算,如 int (*p)[9] =bb;
告诉行指针每行的长度,就能把一维数组当二维数组运算。
2,new出来的二维数组结构很明显,二级指针
int **aa= int *[9]; //创建9个一级指针元素的数组,
- for(int i =0; i<row; i++)
- {
- aa[i]=new int [column];
- }
-
数据结构-二维数组-存储结构
2017-09-28 11:18:40数组的两个主要的顺序存储方式,数组具有随机访问特点,要求能够依据下标计算出任一数组元素的存储地址(概念上的地址):计算机主存的每个地址和存储内的每个...在计算元素地址之前需要了解二维数组的两种存储方式。数据结构-二维数组存储结构
一、随机访问地址计算
前情提要:
下文中说到的地址,在c语言和c++语言里叫指针,与现实生活中每个家庭都有家庭地址一样类似的概念,但是真正细究起来,c语言和c++语言里的地址和真实的主存地址,也就是物理地址又是不一样的,主要原因是有一个计算机操作系统管理着你写的程序具体在哪一个物理内存块,所以c语言和c++语言里的地址也叫做虚拟地址,虚拟地址到物理地址映射是操作系统的内存管理实现的,这里说起来又是一堆的话。
两种存储方式
数组具有随机访问特点,要求能够依据下标计算出任一数组元素的存储地址(概念上的地址):
计算机主存的每个地址和存储内的每个字节是一一对应的,而每个字节间的排列顺序是线式的。在计算元素地址之前需要了解二维数组的两种存储方式:
二维数组具有两种存储方式:1、以行为主顺序优先存储:
因为aij是二维数组中第i行,第j列的元素,第(i−1)行共(i−1)n个元素,在第i行中前面已经存放了(j−1)个元素,故在aij前面共放了(i−1)n+(j−1)个元素;
令每个元素占用空间e个单位
以第一个a11的地址address(a11)为基地址可以得到:address(aij)=address(a11)+((i−1)n+(j−1))e如果以任意的A[c1..d1,c2..d2](其中c1、c2表示基地址元素;d1−c1+1、d2−c2+1表示数组的行数和列数)可得:
address(aij)=address(ac1c2)+((i−c1)(d2−c2+1)+(j−c2))2、以列为主顺序优先存储:
因为aij是二维数组中第i行,第j列的元素,第(j−1)列共(j−1)m个元素,在第i行中前面已经存放了(i−1)个元素,故在aij前面共放了(j−1)m+(i−1)个元素;
令每个元素占用空间e个单位
以第一个a11的地址address(a11)为基地址可以得到:address(aij)=address(a11)+((j−1)m+(i−1))e如果以任意的A[c1..d1,c2..d2](其中c1、c2表示基地址元素;d1−c1+1、d2−c2+1表示数组的行数和列数)可得:
address(aij)=address(ac1c2)+((j−c2)(d1−c1+1)+(i−c1))以上就是对数组的顺序存储两种方法介绍,初写理论文章大牛勿喷,多多指教哈
-
一维数组及其二维数组的表示
2018-11-03 12:12:49二维数组:一维数组的叠加,将一维数组看做是一个 “数据”,则将多个数据 依照一位数组 在 另一方向上有序排列。 n维数组:(n-1)维数组的叠加,叠加方式参照 二维数组 由 一维数组 叠加。 注: (1)数据从 低...数组:存储相同数据类型的集合
一维数组:是指由相同数据类型的数据 经过 在同一方向 有序排列,一维数组 结构单一,但却是二维数组、多维数组的集合
二维数组:一维数组的叠加,将一维数组看做是一个 “数据”,则将多个数据 依照一位数组 在 另一方向上有序排列。
n维数组:(n-1)维数组的叠加,叠加方式参照 二维数组 由 一维数组 叠加。
注:
(1)数据从 低地址 向 高地址 移动, 即 第一个 “数据” 在整个 数组中 地址最小。
(2)数组名 可以 表示 第一个 “数据” 的地址
代码如下:(结果为最后,并对其做解释)
头文件:“指针.h”
#pragma once
#include<stdio.h>
#define A 10//一维指针
void point_1()
{
int i = 0;
int amarry[A];
for (i = 0; i < A; i++)
{
amarry[i] = i;
}printf("\n\t 一维数组:\n");
printf("\tamarry[0]:%d 地址: %p sizeof(&amarry[0]):%d \n\n", amarry[0], amarry,sizeof(&amarry[0]));
printf("\t*(amarry):%d 地址: %p sizeof(&(*amarry)):%d \n\n", *amarry, &amarry[0],sizeof(amarry));
}
void point_2()
{
int i = 0;
int j = 0;
int count = 0;
int amarry_2[A][A];
for (i = 0; i < A; i++)
{
for (j = 0; j < A; j++)
{
amarry_2[i][j] = count++;
}
}printf("\n\t 二维数组:\n");
//打印数组的首地址
printf("\n\tamarry_2[0][0]:%d 地址: %p sizeof(&(amarry_2[0][0])): %d \n\n", amarry_2[0][0], &(amarry_2[0][0]),sizeof(&amarry_2[0][0]));
printf("\t*(amarry_2[0]):%d 地址: %p sizeof(amarry_2[0]+0): %d \n\n", *amarry_2[0], amarry_2[0], sizeof(amarry_2[0]));
printf("\t*(*amarry_2+0):%d 地址: %p sizeof(amarry_2): %d \n\n", **amarry_2, amarry_2, sizeof(amarry_2));
}void test()
{
point_1();}
源文件:test.c
#include"指针.h"
#include<Windows.h>int main()
{
test();
system("pause");
return 0;
}一维数组:
-
二维数组怎样存储
2020-04-27 16:34:15其实呢,二维数组的说法是不准确的,因为C/C++都不存在二维数组的数据结构,只不过一些入门教程为了让初学者快速理解产生的名词,所以在C/C++仅存在数组的数组的说法。所以说二维数组不过是方遍我们去理解的。 举个...大家对二维数组的存储方式有许许多多奇怪的错误看法,这里来梳理一下
其实呢,二维数组的说法是不准确的,因为C/C++都不存在二维数组的数据结构,只不过一些入门教程为了让初学者快速理解产生的名词,所以在C/C++仅存在数组的数组的说法。所以说二维数组不过是方遍我们去理解的。
举个例子吧:
int nums[2][2] = { {1, 2}, {2, 3} };
这是一个很普通的二维数组,从某个维度上来理解(一切为了李姐)int x[2]与int nums[2][2等价,这里的x我们视为一种自定义数据类型 x 等于int a[2],好嘛,我们就可以认出所谓二维数组就是,一维数组类型的一维数组,二维数组也看可以看成一维数组,第一行数据为这个二维数组的首元素(二维数组的元素类型就是一维数组),行优先策略。
从上述论证中可以得出,二维数组是属于一维数组的(嗯,不好解释,自行理解),所以二维数组是满足一维数组中的属性的,例如:数组名代表数组的首地址,也可以代表数组的首元素地址。这样讲不直观,给大家演示一下吧。
可见nums与&nums[0]一致。
&num[1]与&nums[0]差值为8,可推出一行,一行进行存储的(如下图)一维数组的数组名是一级指针,可推出二维数组的数组名也是一级指针。
推理方面有很多问题,论证有很多问题,大家看一下,有什么问题,可以评论,我会回答的。 -
java一维数组、多维数组底层存储
2017-07-28 15:04:202、数组是一个引用数据类型,数组的变量只是一个引用,数组元素和数组变量在内存里是分开存放的。 (二)初始化 1、静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度。 2、动态... -
java二维数组 一维数组_java基础5 (一维)数组和二维数组
2021-02-12 13:21:24本文知识点(目录):一、一维数组1、前言如果需要存储大量的数据,例如如果需要读取100个数,那么就需要定义100个变量,显然重复写100次代码,是没有太大意义的。如何解决这个问题,Java语言提供了数组(array)的数据... -
二维数组的存储
2015-02-08 08:11:55本部分“提高篇”的目标,是使学习者学会用数组表示和处理成组的数据,用函数组织出清晰的程序结构,有能力编写出写在一个文件中的,300行左右的多函数程序。此外,还学习相关的经典的算法思想和实现,具备相当规模... -
二维数组在内存中的存储结构
2019-07-16 22:20:13内存空间分为三块区域,从左至右分别为:栈内存,堆内存,存储区(存常量值) 基本数据类型变量空间开在栈内存中,引用数据...即一个一维数组中存储的不是int或其他基本类型 的值,而是同样的引用类型——数组。a... -
(约瑟夫环解法之一(一维动态数组存储结构))
2020-12-27 21:00:45约瑟夫环解法之一(一维动态数组存储结构)这是我第一次在CSDN上发布文章约瑟夫环问题算法流程实现代码执行结果 这是我第一次在CSDN上发布文章 您好! 这是我第一次在CSDN上发布文章,以前都是来这里查找资源,感谢... -
数据结构 二维数组表示一维数组
2013-08-03 11:31:512、看数组代表矩阵的表示方法,引发了关于一维指针表示二维数组的方法和二维数组作为参数的问题 1)比如: a[3][4]是一个二维数组, 怎么定义一个指针p,使得它能替代数组名a? 比如对于访问一 -
Python & Java一维数组、二维数组、三维数组的初始化
2021-01-22 17:27:28对于 Python 来说,序列是最基本的数据结构。...对于 Java 来说,数组是在内存中存储相同数据类型的连续的空间,声明一个数组就是在内存空间中划出一串连续的空间。 数组名代表的是连续空间的首地址,通过首地 -
一维数组和二维数组
2020-01-29 23:54:12数组一个变量,存储一组相同类型数据的数据结构。...一维数组 使用数组 声明数组:告诉计算机数据类型是什么(声明数组时不规定数组长度) 数据类型 数组名[]; 数据类型[] 数组名; 分配空间:告诉计算机分配几个连... -
一维数组与二维数组
2019-04-26 17:37:30开发工具与关键技术:开发工具:MyEclipsse 10 关键技术:一维数组与二维数组 1、 数组对于所有编程语言来说都是重要的数据结构之一,Java 语言中提供的数组是用来 存储固定大小的同类型元素; 2、 必须声明数组变量... -
java学习初探八之数组一维数组、二维数组
2017-09-03 01:27:54(4)数组分为:一维数组、二维数组、三维数组、多维数组。 (5)数组中存储的元素类型是统一的。 (6)数组长度不可改变,数组一旦创建,长度是不可改变的,固定的。 数组优点:查找效率高。因为数组中的存储... -
二维数组的存储方式及其作为参数的方法
2010-04-10 23:19:00二维数组的存储方式及其作为参数的方法二维数组A[m][n]可以视为由m个行向量组成的向量,或者是由n个列向量组成的向量。由于计算机的内存是一维的,多维数组的元素应排成线性序列后存入存储器。数组一般不做插入和... -
一个数组可以存储不同类型的数据_详解Java数组结构
2021-01-21 18:31:24文章导读【前面介绍的数据类型都是基本数据类型,例如整型、字符型、浮点型等数据,属于简单的数据类型。但要解决现实问题仅有简单数据类型是不够的,难以反映出现实数据的特点...第二小节讲述数组的存储结构;第三... -
图-邻接矩阵(二维数组)存储结构下的 深度优先遍历与广度优先遍历,求树的两个节点的最近公共祖先(LCA)
2020-04-28 18:43:58有下面一个图 图的各个顶点之间只有唯一的道路相连,而且任顶点都是可以互达的, 解答要求 时间限制:1000ms, 内存限制:64MB 输入 每个样例输入: 第一行两个正整数N,Q,图有N个顶点,有Q个询问。其中1 <= N,Q... -
C语言与Java的多维数组在存储结构上的不同
2020-09-27 20:36:15讲到的数组我发现用上面的结构根本无法带入进去,原来是因为c语言中整个数组都是在栈当中的,而多维数组虽然在逻辑结构上是多维的,但是在存储结构上依旧是一维数组,这种存储结构如下图所示 其实这两者就是下图中... -
java中的一维数组
2021-01-03 21:15:21java中的一维数组 @目录 1. 数组的含义 package array1; /* 数组: 1.数组是一种引用类型 2.数组是一种简单的数据结构,线性的结构 3.数组是一个容器,可以用来存储其他元素 4.数组是可以存储任意数据类型... -
一维数组所有元素是否大于_C语言:数据结构-图的存储结构-边集数组
2021-01-09 01:54:32边集数组(Edgeset Array)是利用一维数组存储图中所有边的一种图的表示方法。该数组中所含元素的个数要大于等于图中的边数,每个元素用来存储一条边的起点和终点(对于无向图,可选定边的任一端点为起点或终点)以及... -
一维数组及二维数组几种常用写法的含义
2018-04-18 21:48:14一维数组:int a[]={1,2,3,4,5,6}; 存储结构:常用的表示方法:(1)a:数组名表示数组首元素的地址&a[0],视为指针int*(2)a+1或者*(a+1):指针指向的地址后移一个单元格,保存&a[1],视为指针int*(3)a[0]:... -
python中二维数组存储_python中的二维数组表示(list与numpy.array)
2021-01-29 04:50:15由此,当为了保存一个简单的[1,2,3]时,需要3个指针和3个整数对象用list来表示二维数组时,最外层的list中每个元素为一维数组,即a=[[1,2,3],[4,5,6],[7,8,9]]>>a[[1,2,3],[4,5,6],[7,8,9]]2. numpy.array可..... -
数据结构 || 二维数组按行存储和按列存储
2019-03-16 19:39:48问题描述: 设有数组A[n,m],数组的每个元素长度为3字节,n的值为1~8,m的值为1~10,数组从内存收... 因为一般情况下存储单元是单一的存储结构,而数组可能是多维的结构,则用一维数组存储数组的数据元素就存... -
进阶06:数组 使用一维数组模拟栈数据结构 使用二维数组模拟酒店,酒店管理系统 Arrays工具类 冒泡排序算法...
2021-01-14 10:54:59数组总结 及 静态初始化一维数组 /* Array: 1、java语言中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object 2、数组实际上是一个容器,可以同时容纳多个元素(数组是一个数据的集合) 数组... -
C++与MATLAB数组的存储结构
2015-12-21 10:50:40数组都是以一维数组的形式分配在数据空间的: 1、一维数组X[M]的情况下 index_C=i; index_matalb=i; 2、二维数组A[M][N]的情况下 index_C=i*N+j index_matlab=i+j*M 因为在c++中,第(i,j)个元素用... -
第四章 一维数组 二维数组 Arrays使用
2020-07-06 11:59:46一维数组 定义: 数组是用来存储一组相同类型数据的数据结构。 当数组初始化完毕后,Java为数组在内存中分配一段连续的空间,其在内存中开辟的空间也将随之固定,数组的长度也不能再发生改变。 即使数组中没有保存... -
matlab sort三维_三维数组存储顺序
2021-01-13 05:36:48对于上次提到的一维数组,其每个元素都是一个简单数据类型的对象,其结构如同一个一维的数据排列;对于一个二维数组,它的每一个元素都是一个一维数组,其形...文章jerry.yin2016-02-18977浏览量静态数组的妙用... -
一维数组的创建
2020-12-21 19:36:09一维数组 创建数组 在声明的同时初始化 数组元素类型[] 数组名 = new 数组元素类型[数组长度]; 使用这种方式声明数组,数组的内容为对应数据类型的默认值。 例如,创建一个长度为5的字符串数组。 String[] arr = ... -
Java.数组(一维数组)
2020-02-21 12:48:55数组(一维数组) 1.数组: 1.数组是一种引用类型。 2.数组是一种简单的数据结构,线性的结构。 3.数组是一个容器,可以用来储存其他元素。 数组可以储存任意类型的数组元素, 4.数组分为:一维数组、二维数组、三维...
-
页面切换的动画过渡
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)
-
朱老师鸿蒙系列课程第1期-2鸿蒙系统Harmonyos源码架构分析
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
MySQL 四类管理日志(详解及高阶配置)
-
解决:Maven resources compiler: Maven project configuration required for module ‘c,不识别Maven项目
-
Spring源码5.3Bean的加载 缓存中获取单例Bean
-
MySQL 备份与恢复详解(高低版本 迁移;不同字符集 相互转换;表
-
MySQL中 order by 与 limit 混用,分页有BUG!
-
基于注意力的递归时间受限玻尔兹曼机用于雷达高分辨率测距剖面序列识别
-
中国移动-源码
-
Mysql数据库面试直通车
-
linux开源镜像网址
-
MySQL 存储过程(创建海量数据实验环境)
-
深究字符编码的奥秘,与乱码说再见
-
Online Orientation schedule (Sem 2 2020_2021).docx
-
MySQL 索引
-
C#线程参考手册(多线程技术分析)
-
基于干物质流的番茄生长可视化