想來學c語言的人,都會覺得陣列並不是很難,一問c語言最難的是什麼?指標?結構體?乙個簡單的思考:今天我就以我們認為不難的陣列聊聊。
上學的時候老師就告訴我們:乙個就想當與乙個*。這句話有問題嘛?答案是沒問題。
但是,就是因為這個沒問題,導致工作中有問題。
int arr[4]
[5];
int*
* p = arr;
請問,有問題嘛?
好想沒問題,老師不是說了嘛,乙個代表乙個*,兩個不就是兩個*嘛。
我想說的是問題就出在這裡,這麼寫,不會報語義錯誤,但是編譯器會報錯。
比如:
#include
#include
void
test
(int
** p,
int len)
;//**塊我不寫**
intmain()
;int len =
sizeof
(arr)
/sizeof
(*arr)
;test
(arr,len)
;system
("pause");
return0;
}
這裡將二維陣列作為引數傳入函式的時候,編譯器會做一步操作!
int
** p =
(*arr)[4
];//error,這裡會報間接級別不同
如果上面這個還看不出來錯在哪兒,c語言確實是我們沒學好。陣列實際型別是int [3][4],在作為右值時可以被轉化為int (*)[4],它們都和int **不同,自然不可用。
結論:陣列做為形參時,退化為指標三維陣列,退化為指向二維陣列的指標
二維陣列,退化為指向一維陣列的指標
一維陣列,退化為指向型別(如int)的指標
C語言二維陣列作為函式引數
設有整型二維陣列a 3 4 如下 0 1 2 3 4 5 6 7 8 9 10 11 它的定義為 int a 3 4 設陣列a的首位址為1000,各下標變數的首位址及其值如圖所示。前面介紹過,c語言允許把乙個二維陣列分解為多個一維陣列來處理。因此陣列a可分解為三個一維陣列,即a 0 a 1 a 2 ...
C語言二維陣列作為函式引數傳遞
二維陣列中元素排列的順序是按行存放的,即在記憶體中先順序存放第一行的元素,再存放第二行的元素.二維陣列作為函式引數,實參可以直接使用二維陣列名,在被呼叫函式中對形引數組定義可以指定所有維數的大小,也可以省略第一維的大 明,如 void f int a 3 4 void f int a 4 它們是合法...
二維陣列 作為函式引數
前言 今天在實現裝配線排程程式時候,用到了二維陣列,並將其作為函式的引數。在寫程式的時候,遇到一些問題,即二維陣列做函式的引數應該如何正確表示。我寫程式的錯誤如下程式所示 1 include 2 void print int a 3 3 67intmain 8 10print a 11return0...