--------------------------------------------------------------------------------------------------------------------------------⽬录:
第⼀部分:⼆维数组在内存中的存储⽅式 第⼆部分:⼆维数组作为函数形参的使⽤
--------------------------------------------------------------------------------------------------------------------------------- 第⼀部分:⼆维数组在内存中的存储⽅式
⼆维数组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 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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务