陣列做函式引數時的使用

2021-10-11 12:20:30 字數 617 閱讀 9024

在函式需要將陣列作為引數傳入時,陣列是傳址呼叫,即將陣列作為實參時,傳入的其實是陣列的首位址,實質上是乙個指標。

在定義函式時可以定義乙個指標,然後去呼叫陣列,此時在函式內部的操作會直接修改陣列的實際對應元素。因為傳輸進函式的陣列的本質就是陣列的首元素位址,函式內部按照位址去修改當然相當於直接運算元組。

在需要乙個函式返回資料時也可以用定義指標,然後傳入陣列,將需要傳回的資料放進陣列內,在函式結束呼叫後,去相應的陣列內取回資料。

但是需要注意的是,陣列傳入函式時只有當傳入的是乙個陣列名時才是傳址呼叫,如果給定下標的話就是乙個標量,例如定義乙個陣列int num[20]。當傳入num[0]、num[1]或其他下標時,傳入的就是乙個標量,而非乙個傳址呼叫了,此時如果有需要依然傳入位址,例如想將資料放入陣列,但是想從第二個元素位開始,就需要加乙個取址符 「&」 ,即&num[2],此時會將num[2]的位址傳入,在寫入資料時,也會從num[2],開始。

注意:如果定義乙個陣列,元素只有乙個下標,即類似於int num_ine[1],此時直接傳入函式,也是標量傳入,而非傳址呼叫。

在需要將陣列傳入函式,但是不想陣列被改變時,可以使用const 關鍵字修飾,即函式形參定義為int const num,此時陣列num會被宣告為常量,即不可改變。

陣列做函式引數

陣列名是陣列元素首位址,可以直接當做實參,可以用指標或方式來當形參接收,都是位址傳遞,形參都是指標方式 include void input int arr void output int arr 這裡得出的大小是4個位元組,證明形參是指標形式 printf n d sizeof arr void ...

陣列做函式引數的退化問題

include includevoid arraysort int a,int num void arraysort int a,int num void print array int a,int num int main int i 0 int num sizeof a sizeof a 0 n...

多維陣列做函式引數的退化

退化過程 void printarray01 int a 3 5 4k void printarray02 int a 5 5k void printarray03 int myarray 5 這就是陣列指標 6k 多維陣列做函式引數為什麼會存在退化?為什麼編譯器要設計成這個樣子 如何證明二維陣列在...