【题目】
上周五, 涛哥给我出了一道题:
int a[5][10];
int **p;
如何将a赋值给p(a与p之间如何转换), 使a[x][y] == p[x][y]
-------------------------------------------------------------------------------------
【分析】
二维数组看法:两个一维数组
第一个一维数组:a[5]:a[0] a[1] a[2] a[3] a[4]
第二个一维数组:a[0][10]:a[0][0], a[0][1], a[0][2], a[0][3], a[0][4], a[0][5], a[0][6], a[0][7], a[0][8], a[0][9]
a[1][10]:a[1][0], ......
a[2][10]:a[2][0], ......
a[3][10]:a[3][0], ......
a[4][10]:a[4][0], ......
又因为a[0] == &a[0][0], a[1] == &a[1][0], a[2] == &a[2][0], a[3] == &a[3][0], a[4] == &a[4][0]
所以我们可以看出a[5]这个数组实际上就是个指针数组, 有五个元素, 每个元素都是int* 类型的指针变量
所以我们只要构造一个指针数组p, 对应赋值为a[0]~a[4], 则p[0]~p[4]指向二维数组对应位置, 则p[x][y] == a[x][y]
【注】构造指针数组在代码里写了两种方法, 见不同的条件编译, 运行结果与代码如下:
root@ubuntu:/lianxi/lianxi_c++/chapter1# gcc tao_pro.c -o pro.out
root@ubuntu:/lianxi/lianxi_c++/chapter1# ./pro.out
liao1
---------a[5][10]---------
a[0][0] = 1a[0][1] = 2a[0][2] = 3a[0][3] = 4a[0][4] = 5a[0][5] = 6a[0][6] = 7a[0][7] = 8a[0][8] = 9a[0][9] = 10
a[1][0] = 11a[1][1] = 12a[1][2] = 13a[1][3] = 14a[1][4] = 15a[1][5] =