陣列 物件分別作為函式引數時

2021-06-18 03:08:09 字數 3327 閱讀 2468

一、物件作為函式的引數

物件也可以作為函式的引數傳遞給函式,其轉遞方法與傳遞其他型別的資料一樣,可採用值傳遞和位址傳遞兩種方法

值傳遞時是把物件的拷貝而不是本身傳遞給函式,函式中對引數物件的任何修改都不會影響呼叫該函式的物件本身

位址傳遞時,呼叫該函式的物件與引數物件共用同乙個位址,所以,函式對引數物件的任何修改都會影響呼叫該函式的物件本身。?

12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

#include

usingnamespacestd;

classtr

tr(intn)

voidset_i(intn)

intget_i()

private:

inti;

};

voidsqr_it1(tr ob)

voidsqr_it2(tr *obj)

intmain()

呼叫sqr_it前,實參物件obj的資料成員i=10   

在函式sqr_it1內,形參物件obj的資料成員i=100   

呼叫sqr_it1後,實參物件obj的資料成員i=10   

(此時,由於是以值傳遞,obj的資料成員i沒有變化,還是原先的10)

在函式sqr_it2內,形參物件obj的資料成員i=100   

呼叫sqr_it2後,實參物件obj的資料成員i=100   

(此時,由於是以位址傳遞,obj的資料成員i發生變化,為sqr_it2中的值100)

應該還可以按照引用來傳遞引數,當不能改變引數是最好用const修飾;

二、二維陣列作為函式的引數

在做資料結構迷宮實驗的時候,要生成乙個二維陣列儲存迷宮資料,為了保證程式的模組化,將生成部分單獨放進乙個函式migongsc()裡。大致**如下:

問題的關鍵就集中在了如何將主函式中宣告的二維陣列migong[8][9]傳遞到自定義函式中去。

方法1:模擬編譯器定址(本法來自csdn部落格,原文:

大體意思為:將二維陣列當作引數的時候,必須指明所有維數大小或者省略第一維的,但是不能省略第二維或者更高維的大小,這是由編譯器原理限制的。事實上,編譯器是這樣處理陣列的:

對於陣列 int p[m][n],如果要取p[i][j]的值(i>=0 && i

p + i*n + j;//注意n!!

這裡如果省略了第二維或者更高維的大小,編譯器將不知道如何正確的定址。根據這個思想,我們可以在程式中模擬編譯器定址的方法,具體如下:

方法二:純樸法:

由方法一衍生,顧名思義,直接將宣告的二維陣列的陣列名(即首位址)傳遞到自定義函式中。但要注意,在函式定義中必須指明第二維的維度!

方法三:二維陣列一維化

c++中的陣列和vb等語言中的陣列例項化的方式不一樣,多維陣列可以說是陣列的巢狀,即二維陣列中,每乙個元素是乙個一維陣列。

建立乙個一維陣列儲存每個子陣列(或者說元素陣列)的首位址,將該陣列傳遞給自定義函式。個人感覺除了提醒人陣列可以巢狀之外。。。是個很蛋疼的辦法。。。

總結:由於c++中不能對陣列進行引用(不知道為什麼),故而傳遞多維陣列的辦法都在指標上打主意。以上三個辦法中,第乙個辦法最具有擴充套件性,可以實現對陣列的先定義,後分配空間的美妙效果(詳見原文)。第二種辦法簡潔明瞭,符合思維習慣。第三種方法。。。呃。。。。

ps:非要使用引用的話,可以用二維向量代替陣列實現,以下為**:

注意二維向量宣告時的寫法:vector> migong(8);//注意空格!!!

歡迎指正!

物件作為函式引數

物件作為函式的引數時,其傳遞過程較為複雜,傳遞方式比較獨特。其傳參過程與陣列不同 陣列變數的名稱代表陣列的首位址,而物件的變數名稱卻不能代表物件的首位址。傳參時不會像陣列那樣以首位址作為函式的引數傳遞,而是先將物件中的所有資料進行備份 複製 將複製的資料作為形參傳遞到呼叫函式中去 類物件中的資料成員...

陣列作為函式引數

一 一維陣列名作函式引數 用陣列名作函式引數,應該在主調函式和被調函式分別定義陣列,例如 void main 在被呼叫函式中宣告了形引數組的大小為10,但在實際中,指定其大小是不起任何作用的,因為c語言編譯對形引數組大小不做檢查,只將實參陣列的首元素位址傳給形引數組。形引數組可以不指定大小,在定義陣...

陣列作為函式引數

陣列元素的作用與變數相當,一般來說,凡是變數可以出現的地方,都可以用陣列元素代替。陣列名也可以做實參和形參,傳遞的是陣列第乙個元素的位址。陣列元素可以用作函式實參,但是不能用作形參,因為形參是在函式被呼叫時臨時分配儲存單元的,不可能為乙個陣列元素單獨分配儲存單元 陣列是乙個整體,在記憶體中佔連續的一...