您好,欢迎来到华佗健康网。
搜索
您的当前位置:首页二维数组存储方式和使用

二维数组存储方式和使用

来源:华佗健康网
⼆维数组存储⽅式和使⽤

--------------------------------------------------------------------------------------------------------------------------------⽬录:

第⼀部分:⼆维数组在内存中的存储⽅式 第⼆部分:⼆维数组作为函数形参的使⽤

--------------------------------------------------------------------------------------------------------------------------------- 第⼀部分:⼆维数组在内存中的存储⽅式

  ⼆维数组A[m][n]可以视为由m个⾏向量组成的向量,或者是由n个列向量组成的向量。

  由于计算机的内存是⼀维的,数组的元素应排成线性序列后存⼊存储器。数组⼀般不做插⼊和删除操作,即结构中元素个数和元素间的关系不变。所以采⽤顺序存储⽅法表⽰数组。1、 ⾏优先存储

将数组元素按⾏向量排列,第i+1个⾏向量紧接在第i个⾏向量后⾯。【例】⼆维数组A[m][n]按⾏优先存储的线性序列为:

A[0][0]、A[0][1]…A[0][n]、A[1][1]、A[1][1]…A[1][n]…A[m][n]、A[m][1]…A[m][n]在PASCAL和C语⾔中数组按⾏优先顺序存储。2、 列优先存储

将数组元素按列向量排列,第i+1个列向量紧接在第i个列向量后⾯。【例】⼆维数组A[m][n]按列优先存储的线性序列为:

A[0][0]、A[1][0]…A[m][0]、A[0][1]、A[1][1]…A[m][1]…A[m][1]、A[0][n]…A[m][n]ORTRAN语⾔中,数组按列优先顺序存储。

第⼆部分:⼆维数组作为函数形参的使⽤

对于⼆维数据作为函数形参的使⽤,可以使⽤以下⼏种⽅式。先科普⼀下指针和⼆维数组的关系:例如:int a[3][5]

(a+i) 代表是整个第i⾏的地址 *(a+i)就表⽰第i⾏⾸元素的地址*(a+i) + j ===> & a[i][j]

*( *(a+i) + j) ===>a[i][j]元素的值

test_func1()/test_func2()/test_func3()这3个函数的执⾏结果是相同的。test_func3()函数是根据⼆维数组在内存中的存储⽅式实现,使⽤时要特别注意。 1 #include 2

3 //void test_func1(unsigned char i, unsigned char ary[][3]) 4 void test_func2(unsigned char i, unsigned int (*ary)[3]) 5 {

6 unsigned int i_x, i_y , temp =0; 7 for(i_y = 0; i_y < i; i_y++) 8 {

9 for(i_x = 0; i_x < 3; i_x++)10 {

11 ary[i_y][i_x] = temp;12 temp++; 13 } 14 }15 }

16 void test_func3(unsigned int *ptr_array)17 {

18 unsigned int i_x, temp =0;19 for(i_x = 0; i_x < 6; i_x++)20 {

21 *ptr_array = temp;

22 ptr_array++; 23 temp++;24 }25 }

26 //------------------------------------------------------------27 int main(void)28 {

29 unsigned int m,n;

30 unsigned int array_A[2][3];31 //test_func1(2, array_A);32 test_func2(2, array_A);

33 //test_func3(&array_A[0][0]);34 for(m = 0; m < 2; m++)35 {

36 for(n = 0; n < 3; n++)37 {

38 printf(\"array_A[%d][%d]: %d \\n\", m, n, array_A[m][n]); 39 }40 } 41 }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务