C語言 二維陣列作為函式引數

2021-10-07 18:06:41 字數 1056 閱讀 9624

想來學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...