C語言的一些遺留問題(2):多維數組與指針

二維數組中運用指針的情況十分重要也是操作二維數組中幾乎必不可少的操作,但是又因爲相對理解的時候有點繞,所以如果長時間沒有使用或者溫習,就很容易遺忘,我們先以一個代碼段來作爲例子:

#include <stdio.h>

int main(){
	int zippo[4][2] = { {2,4},{6,8},{1,3},{5,7} };
	printf("zippo = %p ,  zippo + 1 = %p\n", zippo, zippo + 1);
	printf("zippo[0] = %p,   zippo[0] + 1 = %p\n", zippo[0], zippo[0] + 1);
	printf("*zippo = %p,   *zippo + 1 = %p\n", *zippo, *zippo + 1);
	printf("zippo[0][0] = %d\n", zippo[0][0]);
	printf("*zippo[0] = %d\n", *zippo[0]);
	printf("**zippo = %d\n", **zippo);
	printf("zippo[2][1] = %d\n", zippo[2][1]);
	printf("*(*(zippo + 2) + 1) = %d\n", *(*(zippo + 2) + 1));

	return 0;
}

以上代碼段的輸出結果如下:

zippo = 0099FE68 ,  zippo + 1 = 0099FE70
zippo[0] = 0099FE68,   zippo[0] + 1 = 0099FE6C
*zippo = 0099FE68,   *zippo + 1 = 0099FE6C
zippo[0][0] = 2
*zippo[0] = 2
**zippo = 2
zippo[2][1] = 3
*(*(zippo + 2) + 1) = 3

以上的所有情況基本上涵蓋我們日常使用二維數組指針的所有情況,接下來我們一一的進行分析:
(1)首先zippo是二維數組的數組名,當他作爲一個變量名輸出的時候他表示的是一個地址,也就是這個二維數組的第一個元素所在的地址,也就是zippo[0][0]所在的地址。
(2)zippo + 1表示的也是一個地址值,+1我們理所當然的知道他是在zippo的基礎上移動了一個單位,但是在這裏是往下移動了一行,即表示的是zippo[1][0]的地址。
(3)zippo[0]表示的是zippo這個數組第0行的第一個元素的位置,也就是zippo[0][0]的地址。從結果上看我們也可以看出他的值和zippo的值是一樣的,都是zippo[0][0]的地址值。
(4)zippo[0] + 1從形式上看,也是往後移動了一個單位,但是這裏我們與zippo + 1做一下區分,zippo[0]+1我們可以看出限制了行號,因此zippo[0]+1是在第0行的基礎上往後移動了一列,即就是zippo[0][1]的地址值,而上線的zippo+1因爲沒有限制行號,則表示的是下一行的首元素的地址值。

這裏插一下對於*符號的認知,我們可以把他看作相當於一個解指針的一個操作,即對指針進行解套。
在二維數組中數組名後面每少一個索引值,就可以理解爲加了一套,如zippo就是兩層套,zippo[1]就是一層套,zippo[0][0]就沒有套,就是一個實際的數值,而每加一個*就相當於結了一層套。

(5)* zippo可以由上面的方法看出,因爲沒有索引值,所以有兩層套,加了一個 ,相當於去了一層套,就還剩一下一層套,因此 zippo也就是相當於zippo[0],也就是這個二維數組第0行的首元素的地址值。同理* zippo+1也就相當於zippo[0]+1也就是第0行的第二個元素的地址值。
(6)zippo[0][0]就非常簡單了就是一個簡單的數值。
(7)* zippo[0],同樣上面的方法,只有一個索引值,相當於有一層套,前面又有一個 ,相當於解套了,沒有套了,那他就是一個具體的數值了,相當於zippo[0][0]。
(8)
* zippo同理,沒有索引值,但是前面有兩個符號,就相當於抵消了,徹底解套,因此也是一個具體的數值,相當於zippo[0][0]和 zippo[0]。
(9)對於*(* (zippo + 2) + 1),我們從括號裏面往外分析。(zippo+2)相當於是zippo數組第2行的首地址值,((zippo+2))+1就是第2行的第1個元素的地址值,前面在加一個*就相當於取這個地址上的數值,整個表達式也就是表示該二維數組第2行的1個元素的數值,即zippo[2][1],也就是3。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章