對二维数组的探討

来源:互联网 发布:vb文本框内容不可编辑 编辑:程序博客网 时间:2024/06/05 03:03

這些僅僅是小弟愚見,以拋磚引玉之用。望各位不吝指教。


如果不是动态生成的二维数组,那么可以这么理解:

內存是依靠地址來确定内存中的唯一一个存储单元的,即只有一个参数。

所以在内存中,所有数据都是像一维数组那样顺序存储的,计算机都是不会区分几行几列。所谓的几行几列都是为了我们人类更加容易地思考和操作数据。

你想想, int a[9]={2, 4, 6, 8, 10, 12, 14, 16, 18};         和       int a[3][3]={ {2,4,6}, {8,10,12}, {14,16,18} }; 哪個数组更容易操作和理解?

 

举具体的例子更容易理解,比如:int a[2][3]={ {1,2,3}, {4,5,6} }; 在内存中就是这样分布:

 

而我們可以这样去理解:

 

经过测试,可以得知(a+i)  *(a+i)  a[i] &a[i][0]的值都是一樣的,也就是說:他們都指向同一個地方a[i][0].

In other word,

a[i]的地址和a[i][0]的地址 一樣是&a[i][0]

 

 

 

但是,這豈不是和平常我們用二維字符數組有區別嗎?別急,下面一一說明。

對於 char a[2][3]={ {'0','1','2'}, {'3','4','5'} }; 

 

 

 

也是一樣的。

但是,用C++cout輸出的時候

 

這也和之前的結論不矛盾。因為C++a+1當作指針輸出,而其他都當作是字符串輸出。(後面的亂碼是因為沒有加上’\0’,你懂得)

 

 

 

 

 

 

              

0 0
原创粉丝点击