1. 程式人生 > >對多維陣列名、指向陣列的指標和指標陣列的理解

對多維陣列名、指向陣列的指標和指標陣列的理解

  今天新開的部落格,有點小激動。。。。。。聽說要成為一個好的程式設計師必須要寫部落格,雖然不太明白為什麼,但就當寫日記好了。。。

寫之前先#define WORD '我的內心是崩潰的'

這詞目測在這裡要用到太多次。。。。。

Primer Plus的進度到了273頁,指標和陣列的後半部分。我嘗試著去理解書上給我舉出的每個例子。很不幸的,今晚狀態有夠差,一邊發呆一邊理解我現在暈暈乎乎的。多維陣列和多重指標還有指向多個元素的指標對我來說簡直就是災難。首先陣列和指標的等級必須對應,即指標指向的元素數量必須和該陣列包含的元素數量相等。麻煩就在這裡,第幾級陣列名下包含了幾個元素一不小心就能弄錯,不是跳到了上一級就是跳到了下一級。摘抄一下書上的筆記:

宣告:int  * pt;這是指向一個int的指標

int  (*pa)[3];這是指向3個int組成的陣列組成的指標                             

int ar1[2][3];ar1是一個2*3的陣列,ar1指向一個3個int組成的陣列

int ar2[3][2];ar2是一個3*2的陣列,ar2指向一個2個int組成的陣列

int **p2;**p2是一個int值,*p2是一個指向一個int值的指標,p2是一個指向一個int值的指標的指標

有結論:pt = &ar1[0][0];都指向一個int

pt = ar1[0];都指向一個int(即&ar1[0][0] = ar1[0]

pt =  ar1;非法賦值

pa = ar1;都指向int[3]

pa = ar2;非法賦值

p2 = &pt;都指向int

*p2 = ar2[0];都指向int

p2 = ar2;非法賦值

恩,WORD,真尼瑪亂........由此,想弄清陣列和指標的關係首先必須先弄清指標和陣列名到第指向哪裡,達成這個目標目測需要很多練習,包括書面的和實踐的

好吧還有向函式傳遞一個指標時麻煩也很大,下面是書上的例子:

void somefunction (int (* pt) [4] );這個函式接受一個指向4個int值組成的陣列的指標,或者陣列名

void somefunction (int pt[][4]);當且僅當pt是函式的形式參量時也可以這樣寫

我得說我當時第一眼看到這玩意的反應是"void somefunction (int ar[][])"這樣的形式是不是也可以,還準備回去就試一下。結果我剛翻了一頁就把我這想法槍斃了:

請注意下面的宣告是不正確的:int sum2 (int ar[][], int rows);

尼瑪你逗我呢?(╯‵□′)╯︵┻━┻

好歹讓我自己試試噻?(╯‵□′)╯︵┻━┻

WORD.........................OTL

為什麼不可以呢?好吧書上有解釋(以下是我的理解):

宣告函式時向函式傳遞的必須是一個準確的資料型別,對一個二維陣列,int array[2][3],它的每一級陣列名所指向的資料型別大小都是確定的,array指向int[3],array[i]指向int,array[i][j]是一個int值;但在宣告函式時如果寫成array[][],那麼這個陣列的大小是不確定的,自然不能確定呼叫函式時向該函式傳遞的資料型別,函式在使用該變數是就很可能會出現不知道什麼玩意的錯誤,比如傳遞一個ar[][3]和ar[][1000]............What the hell?這要怎麼想?這個函式接受的資料型別長度到底是3*4還是1000*4?沒法知道。說白了,宣告函式時你必須告訴編譯器這個函式接受的資料型別長度到底是多少,這個要求不僅僅是int型的指標引數,也包括所有的基礎和高階資料型別。

說到這裡我突然想起來上星期C語言的課教了我們“結構體”這個玩意。

我不管怎麼看這東西都是自定義資料型別........................

話說這東西好像有另外一個名字就叫“高階資料型別”........................

尼瑪連資料型別都能自定義了?(╯‵□′)╯︵┻━┻

聽說C的語法很自由但沒箱單這麼自由...........OTL

聽說C++的語法比C還要自由.......................

我已經看到將來我寫C++程式時各種不知道什麼玩意的資料型別和函式滿天飛的樣子了...................................OTL

WORD........................

恩,先學C,然後彙編,然後python(這單詞我死都記不住...............),然後java和O-C。

C++是什麼?能吃麼?(作死)

本來準備懷著作死的心理把那個向函式傳遞指標的例子抄一下試試的,快半夜了,我還是洗洗睡吧........