数组元素存储地址的计算(精选.)

合集下载

N维数组存储结构的研究

N维数组存储结构的研究
( Lcollege of Computer and Information Engineering, Henan University, Henan Kaifeng 475004; 2.Yellow River Conservancy Technical Institute,Henan Kaifeng 475004 )
级 C2 CN, 。 'EH,}禾 D O I
光盘数据库与信息系统
2007 年第 1 期
N 维数组存储 结构 的研 究
张连堂 ‘ , 段淑敏 ‘ 杜纪霞’ , 朱维克 2,
( 1.河南大学计算机与信息工程学院, 河南 开封 475004;2.黄河水利职业技术学院, 河南
开封 475004 )
摘 要:通过对静态N 维数组特点的分析, 阐述了它在内 存中的存储机制, 并给出了数组元素的地址计算公式, 为数据
基于 数组中 元素个数不变的 特殊性, 对于一般的 数组而言
作者简介:杜纪霞( 1979) , 河南省开封市人, 女, 硕士研究生, 挖掘。
主要研究 向:无限传感器网络、
张连堂( 1957研究 向:
) , 河南省开封市人, 男, 教授, 硕士生导师, 主要
20
一 后左 第 个 居 标 变 一 ,…从 左,后 遍 ,边的 一 邻 下 才 化 次… ,右向 最 是 下 即第k 维的 标 左 标, , 下 变化一 第k+l 维的 标 次, 下 要从小到 大 化 遍 次 律波 式向 逼 在此 法中最 下标 变 一 .依 规 ,浪 左 近 算 ,左 可 以 成 外 环最 下 看 是 循 ,右 标可以 成 循 看 是内 环。 例 对 一 如: 于 个3x4x3 的 维 组MA O 它 逻 构 三 数 的 辑结 示 如图1所 意图 示: 表1给出 该 维 组 存中 行 主 顺 存储的 了 三 在内 以 为 序的 序

C语言数组试题

C语言数组试题

第4章 数组4.1内容概述本章主要介绍了数值数组和字符数组的定义、初始化、元素引用和数组数据的输入与输出,字符数组实现字符串、字符串函数的实现与调用。

指针数组与数组指针定义、元素引用。

利用一维数组实现如挑数、排序、求和等实际应用问题。

利用二维数组实现矩阵的应用问题。

利用字符数组实现字符串的各种操作。

本章知识结构如图4.1所示。

图4.1 第4章知识结构图考核要求:掌握一维数组、二维数组、字符数组和指针数组的定义和初始化;掌握数组元素存储地址计算;掌握数组元素的下标法、指针法引用;掌握字符数组与字符串的区别与联系;掌握有关字符串处理函数的使用方法;能利用一维数组、二维数组解决向量、矩阵等实际应用问题。

重点难点:本章的重点是一维数组、二维数组和字符数组的定义、初始化、元素引用,字符串处理函数的使用。

本章的难点是字符串与字符数组的区别,指针数组和数组元素的指针法引用。

核心考点:数组的定义、初始化和数组元素的引用方法,一维数组、二维数组和字符数组的实际应用,字符串的处理方法。

4.2 典型题解析【例4.1】以下对一维数组a 的定义中正确的是( )。

A. char a(10);B. int a[0..100];C. int a[5];D. int k=10;int a[k];解析:一维数组定义的一般形式为:类型标识符 数组名[常量表达式]其中,常量表达式可以是任意类型,一般为算术表达式,其值表示数组元素的个数,即数组长度。

答案:C【例4.2】以下对一维数组的定义中不正确的是( )。

A. double x[5]={2.0,4.0,6.0,8.0,10.0};数组数值数组 定义 初始化 元素引用 数组元素输入和输出 指针数组 定义初始化 应用字符数组 定义 初始化 元素引用 数组元素输入和输出B. int y[5]={0,1,3,5,7,9};C. char ch1[ ]={'1', '2', '3', '4', '5'};D. char ch2[ ]={'\x10', '\xa', '\x8'};解析:可以对一维数组的全部元素或部分元素赋初值。

数组习题

数组习题

第 5 章数组和广义表一、选择题2. 有一个二维数组A[1:6,0:7] 每个数组元素用相邻的6个字节存储,存储器按字节编址,那么这个数组的体积是(①)个字节。

假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是(②)。

若按行存储,则A[2,4]的第一个字节的地址是(③)。

若按列存储,则A[5,7]的第一个字节的地址是(④)。

就一般情况而言,当(⑤)时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。

供选择的答案:①-④: A.12 B. 66 C. 72 D. 96 E. 114 F. 120G. 156 H. 234 I. 276 J. 282 K. 283 L. 288⑤: A.行与列的上界相同 B. 行与列的下界相同C. 行与列的上、下界都相同D. 行的元素个数与列的元素个数相同3. 设有数组A[i,j],数组的每个元素长度为3字节,i的值为1 到8 ,j的值为1 到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为( )。

A. BA+141B. BA+180C. BA+222D. BA+2254. 假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=()。

A. 808B. 818C. 1010D. 10205. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( )。

A. 1175B. 1180C. 1205D. 12106. 有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,假设存储数组元素A[0,1]的第一个字节的地址是0,存储数组A的最后一个元素的第一个字节的地址是(①)。

若按行存储,则A[3,5]和 A[5,3]的第一个字节的地址是(②)和(③)。

《刘大有数据结构》 chapter 5 数组字符串和集合类

《刘大有数据结构》 chapter 5 数组字符串和集合类
Loc(A[i][j])= Loc(A[0][0])+ i *n*C + j*C = Loc(A[0][0])+(i * n + j) *C
再例如三维数组 再例如三维数组D[3][3][4],可以把它看作一维 , 数组 B1[3] = { D[0][3][4],D[1][3][4],D[2][3][4] } , ,
下面我们给出一个 下面我们给出一个Array类的应用例子 类的应用例子. 类的应用例子 例5.1 编写一个函数,要求输入一个整数 , 编写一个函数,要求输入一个整数N, 用动态数组A来存放 来存放2~ 之间所有 之间所有5或 的倍数 的倍数, 用动态数组 来存放 ~N之间所有 或7的倍数, 输出该数组. 输出该数组 说明 : 因为 由用户给出 , 编写程序时无法知 说明:因为N由用户给出 由用户给出, 道需要多大的数组来存放数据, 道需要多大的数组来存放数据,因此采用动态 数组(初始时大小为10) 数组(初始时大小为 ),每当数组满时就调 整数组大小,给它增加10个元素 个元素. 整数组大小,给它增加 个元素
数组在内存中一般是以顺序方式存储的 数组在内存中一般是以顺序方式存储的. 设一维数组 设一维数组A[n]存放在 个连续的存储单元中 , 存放在n个连续的存储单元中 存放在 个连续的存储单元中, 每个数组元素占一个存储单元(不妨设为C个 每个数组元素占一个存储单元 ( 不妨设为 个 连续字节) 如果数组元素A[0]的首地址是 , 的首地址是L, 连续字节). 如果数组元素 的首地址是 则 A[1] 的 首 地 址 是 L+C , A[2] 的 首 地 址 是 L+2C,… …,依次类推,对于 0 ≤ i ≤ n 1 有: , ,依次类推,
B[i]={ A[i][0],A[i][1],…,A[i][n-2],A[i][n-1] } -

数据结构第4章数组和串

数据结构第4章数组和串
1
● 教学目的:理解抽象数据类型数组的概念, 掌握数组的不同存储结构的实现及应用,了 解广义表的相关概念,掌握串的逻辑结构、 存储结构及其基本运算。
● 教学重点:数作在不同 存储结构上的实现。 ● 教学难点:带状矩阵的压缩存储;稀疏矩 阵的三元组表实现及其转置算法,堆结构的 串操作实现;串的模式匹配算法。
矩阵的压缩存储
printf("Array a:\n"); k=0; for(i=0;i<N;i++)//输出矩阵A { for(j=0;j<N;j++) if(i<j)printf("%5d",sa[M-1]); else printf("%5d",sa[i*(i+1)/2+j]); printf("\n"); } printf("Array b:\n"); k=0; for(i=0;i<N;i++)//输出矩阵B { for(j=0;j<N;j++) if(i>j)printf("%5d",sb[M-1]); else printf("%5d",sb[j*(j+1)/2+i]); printf("\n"); }}
矩阵的压缩存储
由此可见,要唯一表示一个稀疏矩阵,在存储三 元组表的同时还需存储该矩阵总的行数、列数及非 零元个数。 练习:写出图4-9(a)所示稀疏矩阵的三元组表。
三元组表(也是线性表)的存储方式主要有两种: 顺序存储和链式存储,从而可引出稀疏矩阵的两种 压缩存储方法:三元组顺序表和十字链表。 3、三元组顺序表
矩阵的压缩存储

汇编语言--操作数的寻址方式(三)

汇编语言--操作数的寻址方式(三)

汇编语⾔--操作数的寻址⽅式(三)三、操作数的寻址⽅式操作数是指令或程序的主要处理对象。

如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。

在CPU的指令系统中,除NOP(空操作指令)、HLT(停机指令)等少数指令之外,⼤量的指令在执⾏过程中都会涉及到操作数。

所以,在指令中如何表达操作数或操作数所在位置就是正确运⽤汇编指令的⼀个重要因素。

在指令中,指定操作数或操作数存放位置的⽅法称为寻址⽅式。

操作数的各种寻址⽅式是⽤汇编语⾔进⾏程序设计的基础,也是本课程学习的重点之⼀。

微机系统有七种基本的寻址⽅式:⽴即寻址⽅式、寄存器寻址⽅式、直接寻址⽅式、寄存器间接寻址⽅式、寄存器相对寻址⽅式、基址加变址寻址⽅式、相对基址加变址寻址⽅式等。

其中,后五种寻址⽅式是确定内存单元有效地址的五种不同的计算⽅法,⽤它们可⽅便地实现对数组元素的访问。

另外,在32位微机系统中,为了扩⼤对存储单元的寻址能⼒,增加了⼀种新的寻址⽅式——32位地址的寻址⽅式。

为了表达⽅便,我们⽤符号“(X)”表⽰X的值,如:(AX)表⽰寄存器AX的值。

1、⽴即寻址⽅式操作数作为指令的⼀部分⽽直接写在指令中,这种操作数称为⽴即数,这种寻址⽅式也就称为⽴即数寻址⽅式。

⽴即数可以是8位、16位或32位,该数值紧跟在操作码之后。

如果⽴即数为16位或32位,那么,它将按“⾼⾼低低”的原则进⾏存储。

例如:MOV AH, 80H ADD AX, 1234H MOV ECX, 123456HMOV B1, 12H MOV W1, 3456H ADD D1, 32123456H其中:B1、W1和D1分别是字节、字和双字单元。

以上指令中的第⼆操作数都是⽴即数,在汇编语⾔中,规定:⽴即数不能作为指令中的第⼆操作数。

该规定与⾼级语⾔中“赋值语句的左边不能是常量”的规定相⼀致。

⽴即数寻址⽅式通常⽤于对通⽤寄存器或内存单元赋初值。

图3.1是指令“MOV AX, 4576H”存储形式和执⾏⽰意图。

第8章 数组和广义表

第8章数组和广义表[能力要求](1)计算机基础知识:掌握线性表的概念以及顺序表和链表的基本操作。

(2)分析问题:针对具体的问题,要能够运用线性表去进行分析,逐步找到解决问题的方法。

(3)具有概念化和抽象化能力:针对具体的应用和实际的问题,能够运用线性表对问题进行抽象,提取它的逻辑结构和存储结构。

(4)发现问题和表述问题:在具体的工程中,能够发现工程中涉及到顺序表和链表的问题,并能够明确表述。

(5)建模:在具体的工程中,能够使用线性表进行建模,设计合理的数据结构和相应的算法。

(6)解决方法和建议:在具体工程应用中,发现了关于线性表的问题,要能够解决问题,并提出合理的建议。

(7)定义功能、概念和结构:使用线性表这种逻辑结构处理一些具体问题,实现系统的功能。

(8)设计过程的分段与方法:采取不同的阶段去设计(概念设计、详细设计)一个具体的线性表的应用项目。

(9)软件实现过程:了解系统中各个模块中的关于线性表的设计;讨论算法(数据结构、控制流程、数据流程);使用编程语言实施底层设计(编程)。

8.1知识点:数组的定义和顺序存储一、选择题1①常对数组进行的两种基本操作是()。

A.建立与删除 B.索引和修改C.对数据元素的存取和修改D.查找与索引2①下面说法中,不正确的是()。

A.数组是一种线性结构B.数组是一种定长的线性表结构C.除了插入与删除操作外,数组的基本操作还有存取、修改、检索和排序等D.数组的基本操作有存取、修改、检索和排序等,没有插入与删除操作3②数组A中,每个元素的长度为3个字节,行下标I从1到8,列下标J从1到10,从首地址SA开始连续存放在存储器内,该数组占用的字节数为()。

A.80 B.100 C.240 D.2704②在二维数组A[9][10]中,每一个数组元素A[i][j] 占用3个存储空间,所有数组元素相继存放于一个连续的存储空间中,则存放该数组至少需要的存储空间是()。

A. 80 B.100 C.240 D.2705②设有一个n*n的对称矩阵A,将其下三角部分按行存放在一个一维数组B中,A[0][0]存放于B[0]中,那么第I行的对角元素A[I][I]存放于B中()处。

C语言数组试题

第4章 数组4.1内容概述本章主要介绍了数值数组和字符数组的定义、初始化、元素引用和数组数据的输入与输出,字符数组实现字符串、字符串函数的实现与调用。

指针数组与数组指针定义、元素引用。

利用一维数组实现如挑数、排序、求和等实际应用问题。

利用二维数组实现矩阵的应用问题。

利用字符数组实现字符串的各种操作。

本章知识结构如图4.1所示。

图4.1 第4章知识结构图考核要求:掌握一维数组、二维数组、字符数组和指针数组的定义和初始化;掌握数组元素存储地址计算;掌握数组元素的下标法、指针法引用;掌握字符数组与字符串的区别与联系;掌握有关字符串处理函数的使用方法;能利用一维数组、二维数组解决向量、矩阵等实际应用问题。

重点难点:本章的重点是一维数组、二维数组和字符数组的定义、初始化、元素引用,字符串处理函数的使用。

本章的难点是字符串与字符数组的区别,指针数组和数组元素的指针法引用。

核心考点:数组的定义、初始化和数组元素的引用方法,一维数组、二维数组和字符数组的实际应用,字符串的处理方法。

4.2 典型题解析【例4.1】以下对一维数组a 的定义中正确的是( )。

A. char a(10);B. int a[0..100];C. int a[5];D. int k=10;int a[k];解析:一维数组定义的一般形式为:类型标识符 数组名[常量表达式]其中,常量表达式可以是任意类型,一般为算术表达式,其值表示数组元素的个数,即数组长度。

答案:C【例4.2】以下对一维数组的定义中不正确的是( )。

A. double x[5]={2.0,4.0,6.0,8.0,10.0};数组数值数组 定义 初始化 元素引用 数组元素输入和输出 指针数组 定义初始化 应用字符数组 定义 初始化 元素引用 数组元素输入和输出B. int y[5]={0,1,3,5,7,9};C. char ch1[ ]={'1', '2', '3', '4', '5'};D. char ch2[ ]={'\x10', '\xa', '\x8'};解析:可以对一维数组的全部元素或部分元素赋初值。

数据结构第五讲数组


而二维数组a[m][n]可以看作:由m个长度为n的线性表(每 一行做为一个线性表)所组成的;由n个长度为m的线性表 (每一列为一个线性表)所组成的。
(2)线性表的长度是可以变的,而数组的大小(所包含元 素的个数)却是固定的 。
2014-7-13
数据结构
5
数组的顺序存储结构
顺序存储结构:
在计算机中,如果用一批连续的存储单元来
2014-7-13 数据结构 26
for ( col=2; col<=a.nu; col++ ) /* 求第col 列中第一个非零元素的在 b.data中的序号 */ pot[col]= pot[col-1]+num[col-1]; for (p=1; p<=t; p++ ) /* 转置 */ { col=a.data[p].j ; q=pot[col]; b.data[q].j= a.data[p].i; b.data[q].i= a.data[p].j; b.data[q].v= a.data[p].v; pot[col]++; } } renturn (1); }
6 1 1 2 3 3 4 4 6
0 11 3 0 0 0
6 1 5 2 2 6 1 3 1
0 0 0 6 0 0
8 15 91 11 3 28 22 6 15
0 91 0 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0
(a) 矩阵M的三元组顺序表
2014-7-13
(b) 转置矩阵N的三元组顺序
关系为:
k=
i(i-1)/2+j-1 当i≧j(下三角元素) j(j-1)/2+i-1 当i<j(交换i,j将上三 角映射到下三角元素)

第5章 数组与指针


也可以用函数strcpy( )实现:
char amounts[6]=”hello”; char customer[6]; strcpy(customer, amounts); /*可以将amounts中的数据复制给 customer*/
(3)strcat()——字符串的连接 该函数是将一个字符串连接到另一个字符串的后面 ,得到一个新的字符串。如要将字符串customer连接到 字符串amounts的后面,可以采用下列语句:
float temp; for(int i=0;i<29;i++) { for(int j=i+1;j<30;j++) { if (cj[i]<cj[j]) { temp = cj[i]; cj[i] = cj[j]; cj[j] = temp; } } } }
//排序
void display( ) { for(int j = 0;j< 30; ++j) { cout << cj[j]<< endl; } } }; int main( ) { students C1; C1.sortData( ); C1.display( ); }
例如:要记录学生的姓名,该如何定义数组?
分析:由于学生的姓名是属于字符串,所以要定义一个字符串数组,如 果每个学生的姓名长度在20个字符以内,则可以定义该数组的长度为21 。
char name[21];
• 5.1.4字符串的主要操作
1.字符串的输入和输出 字符串的输入和输出与一般变量的输入与输出类似, 用cin和cout实现。
第5章 数组与指针
本章学习要点
• 1. 掌握一维数组的定义、赋初值以及简单应用; • 2. 掌握一维字符数组和字符串之间的关系,了解字符 串的常用操作; • 3. 掌握二维数组的定义、赋初值,了解其应用; • 4. 掌握指针的定义和运算; • 5. 掌握指针与一维数组、字符串的关系; • 6. 掌握动态内存管理的方法; • 7.掌握别名引用和指针引用。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数组元素存储地址的计算 一维数组 设一维数组A[n]存放在n个连续的存储单元中,每个数组元素占一个存储单元(不妨设为C个连续字节). 如果数组元素A[0]的首地址是L,则A[1]的首地址是L+C,A[2]的首地址是L+2C,… …,依次类推,对于01in有: CiALociALoc*])0[(])[(

二维数组 二维数组的每个元素含两个下标,如果将二维数组的第一个下标理解为行号,第二个下标理解为列号,然后按行列次序排列个元素,则二维数组呈阵列形状。例如

mnmmnnaaaaaaaaaA212222111211

它是一个行号为1~m,列号为1~n的二维数组元素阵列。 如何保存二维数组? 首先要确定一个顺序

222120121110020100aaaaaaaaaB 222120121110020100aaaaaaaaaB 222120121110020100aaaaaaaaaB

222120121110020100aaaaaaaaa 第0行 第1行 第2行 222120121110020100aaaaaaaaaB 222120121110020100aaaaaaaaaB 222120121110020100aaaaaaaaaB

221202211101201000aaaaaaaaa 第0列 第1列 第2列

222120121110020100aaaaaaaaaB 222120121110020100aaaaaaaaaB 222120121110020100aaaaaaaaaB

222120121110020100aaaaaaaaaB 222120121110020100aaaaaaaaaB

021201221100211020aaaaaaaaa

设count为数组B中元素的个数,则count=9 按行优先存储

1 2 3 4 5 6 7 8 9 … 00a 01a 02a 10a 11a 12a 20a 21a 22a …

第0行 第1行 第2行

1 2

3 4 按列优先存储 1 2 3 4 5 6 7 8 9 … 00a 10a 20a 01a 11a 21a 02a 12a 22a …

第0列 第1列 第2列 地址如何计算? 所谓按行优先顺序,就是将数组元素按行向量的顺序存储,第1i

个行向量存储在第i个行向量之后。 下面我们计算二维数组Amn[][]中任一元素A[i][j]的存储地址,设每个数组元素所占空间为C个连续字节。显然,A[i][j]是第i个行向量B[i]中的第j个元素。

1 2 3 4 5 6 7 8 9 … 00a 01a 02a 10a 11a 12a 20a 21a 22a …

第0行 第1行 第2行 在A[i][j]之前的元素个数为u,分别是A[0][0],A[0][1],A[0][2],…,A[0][n],A[1][0],A[1][1],A[1][2],…,A[1][n],…,A[i-1][0],A[i-1][1],A[i-1][2],…,A[i-1][n],A[i][0],A[i][1],A[i][2],…,A[i][j-1] 设每个数组元素所占空间为C个连续字节。 则 Loc(A[i][j])=Loc(A[0][0])+u*C u=? 前i行(第0行到第i-1行)(每行n个元素)的元素个数+第i行的元素个数(A[i][0]到A[i][j-1]) 因此,u=i*n+j 故 Loc(A[i][j])=Loc(A[0][0])+u*C =Loc(A[0][0])+(i*n+j)*C 按列优先存储

1 2 3 4 5 6 7 8 9 … 00a 10a 20a 01a 11a 21a 02a 12a 22a …

第0列 第1列 第2列 地址如何计算? 在A[i][j]之前的元素个数为v,分别是A[0][0],A[1][0],A[2][0],…,A[m][0],A[0][1],A[1][1],A[2][1],…,A[m][1],…,A[0][j-1],A[1][j-1],A[2][j-1],…,A[m][j-1],A[0][j],A[1][j],A[2][j],…,A[i-1][j] 设每个数组元素所占空间为C个连续字节。 则 Loc(A[i][j])=Loc(A[0][0])+v*C v=? 前j列(第0列到第j-1列)(每列m个元素)的元素个数+第j列的元素个数(A[0][j]到A[i-1][j]) 因此,v=j*m+i 故 Loc(A[i][j])=Loc(A[0][0])+v*C =Loc(A[0][0])+(j*m+i)*C 高维数组 按行优先:“左”下标优先,即第一(最左)下标的下标值较小的元素较先存储,第一个下标值相同者,按第二下标优先存储,对任意的k>1,对第1~(k-1)维相同者,先存储第k维中下标值较小者。 按列优先:“右”下标优先(最后一维下标为最右),先存储第n维下标值较小者,第n维下标值相同者,先存储第n-1维下标值较小者。 三维数组D[3][3][4]的顺序存储次序是 元素表示为D[i][j][k] 其中,0≤i≤2,0≤j≤2,0≤k≤3,

可以把它看作一维数组 B1[3] = { D[0][3][4],D[1][3][4],D[2][3][4] }

D[0][0][0],D[0][0][1],D[0][0][2],D[0][0][3] D[0][1][0],D[0][1][1],D[0][1][2],D[0][1][3] D[0][2][0],D[0][2][1],D[0][2][2],D[0][2][3]

D[1][0][0],D[1][0][1],D[1][0][2],D[1][0][3] D[1][1][0],D[1][1][1],D[1][1][2],D[1][1][3] D[1][2][0],D[1][2][1],D[1][2][2],D[1][2][3]

D[2][0][0],D[2][0][1],D[2][0][2],D[2][0][3] D[2][1][0],D[2][1][1],D[2][1][2],D[2][1][3] D[2][2][0],D[2][2][1],D[2][2][2],D[2][2][3]

D[0][3][4] i=0

D[1][3][4] i=1

D[2][3][4] i=2 For x=0 to 2 do For y=0 to 2 do For z=0 to 3 do D[i][j][k]的地址: Loc(D[i][j][k])=Loc(D[0][0][0])+w*C 第一个下标的变化:0到i-1,共i*3*4个元素 第一个下标为i时,第二个下标的变化:0到j-1,共j*4个元素 第一个下标为i,第二个下标为j时,第三个下标的变化:0到k-1,共k个元素 w= i*3*4+j*4+k Loc(D[i][j][k])=Loc(D[0][0][0])+w*C =Loc(D[0][0][0])+(i*3*4+j*4+k)*C

For z=0 to 3 do For y=0 to 2 do For x=0 to 2 do

221202211101201000aaaaaaaaa D[0][0][0],D[1][0][0],D[2][0][0] D[0][1][0],D[1][1][0],D[2][1][0] D[0][2][0],D[1][2][0],D[2][2][0]

D[0][0][1],D[1][0][1],D[2][0][1] D[0][1][1],D[1][1][1],D[2][1][1] D[0][2][1],D[1][2][1],D[2][2][1]

D[0][0][2],D[1][0][2],D[2][0][2] D[0][1][2],D[1][1][2],D[2][1][2] D[0][2][2],D[1][2][2],D[2][2][2]

D[0][0][3],D[1][0][3],D[2][0][3] D[0][1][3],D[1][1][3],D[2][1][3] D[0][2][3],D[1][2][3],D[2][2][3]

For z=0 to 3 do For y=0 to 2 do For x=0 to 2 do D[i][j][k]的地址: Loc(D[i][j][k])=Loc(D[0][0][0])+w*C 第三个下标的变化:0到k-1,共k*3*3个元素 第三个下标为k时,第二个下标的变化:0到j-1,共j*3个元素 第三个下标为k,第二个下标为j时,第一个下标的变化:0到i-1,共i个元素 w= k*3*3+j*3+i

Loc(D[i][j][k])=Loc(D[0][0][0])+w*C =Loc(D[0][0][0])+(k*3*3+j*3+i)*C

D[3][3][0] k=0

D[3][3][1] k=1

D[3][3][2] k=2

D[3][3][3] k=3

j=0 j=1 j=2

j=0 j=1 j=2

j=0 j=1 j=2

j=0 j=1 j=2

相关文档
最新文档