為什麼陣列只能做函式實參而不能做函式形參

時間 2022-11-25 00:40:23

1樓:陳宗權

可以的啊。

如果你認為void func(int a)這樣的形參不是陣列,那麼作為實參的時候的陣列名也不能稱之為陣列了,因為它實際上只表示第乙個元素的位址而已,根本不表示整個陣列。因此,如果老師講「陣列只能做函式實參而不能做函式形參」那是不負責任的。

2樓:匿名使用者

都可以做的,引數只是用於函式間資料的傳遞而已,陣列的話傳遞都是陣列的首位址,如果你已經定義了陣列的長度的話,那麼在傳遞時只是傳遞陣列的首位址即陣列名而已啦。陣列形參和實參都是一樣的,因為它們是共用同一內在單元的。一般會與指標變數一起使用的,你要弄清的是形參和實參的意思,它們之間是如何聯絡在一起的?

都是靠乙個位址的,俺的腦袋有限且也是自己學的,回答錯誤的話請指教。只能這樣子回答了,希望你能找到更好的答案。

補充一下:陣列不管做形參還是實參都是同乙個單元的[就是同乙個內在空間並且有自己的位址]

那麼傳遞時只需要將該單元的位址傳遞就行了,而形引數組會得到這個位址後,會根據這個位址找到該陣列的記憶體單元的,就是找到該記憶體裡東西了。

3樓:你愛的她錦

是因為陣列元素作為形參時,陣列元素形參定義的形式與陣列傳遞的形式一致,即f(int a[10]) 與f2(int a[5]),後者你原本的意思是想傳遞a[5]這個元素,這就跟形參為陣列的形式一致了,意思為傳遞乙個陣列名為a的陣列,陣列長度為5,但編譯系統只會將陣列名的位址傳入給實參。

4樓:夏天的青雲

#include

int add(int x)//這裡的陣列即變成指標了int main()

;printf("%d\n",add(i));

return 0;

}//給個例子...不知道樓主所謂的形參是否是引數個數都是固定的?

為什麼陣列元素只能作函式實參而不能作函式形參?

5樓:

因為陣列作為引數時傳遞的是陣列的首位址

6樓:匿名使用者

陣列元素不能做形參啊

陣列做函式引數時應注意的問題?

7樓:匿名使用者

陣列名作函式引數

陣列名可以作函式的實參和形參。如:

main()

f(int arr,int n);

array為實參陣列名,arr為形參陣列名。在學習指標變數之後就更容易理解這個問題了。陣列名就是陣列的首位址,實參向形參傳送陣列名實際上就是傳送陣列的位址,形參得到該位址後也指向同一陣列。

這就好象同一件物品有兩個彼此不同的名稱一樣。

同樣,指標變數的值也是位址,陣列指標變數的值即為陣列的首位址,當然也可作為函式的引數使用。

歸納起來,如果有乙個實參陣列,想在函式中改變此陣列的元素的值,實參與形參的對應關係有以下4種:

1) 形參和實參都是陣列名。

main()

}a和x指的是同一組陣列。

2) 實用陣列,形參用指標變數。

main()

}3) 實參、型參都用指標變數。

4) 實參為指標變數,型參為陣列名。

用陣列名做函式引數時形參和實參的要求

8樓:love瀟灑小峰

陣列名的本質是位址,也就是指標,如果要讓陣列名作為形參,必須寫成(int array)的形式,或者(int * array)。

以陣列名作函式引數時,實參陣列與形引數組都不必定義長度,因此實參

9樓:風若遠去何人留

不對形參可以不定義長度,因為等效於指標。

但實參 必須定義長度

即使是指標型別 ,也需要指向特定空間,或者分配動態記憶體,實際上 還是有長度約束的。

最後一句實參與形參的結合方式是位址結合,與陣列長度無關 這個是對的。

10樓:針迎秋藍曲

搜一下:以陣列名作函式引數時,實參陣列與形引數組都不必定義長度,因此實參

j**a類中用類的陣列作為函式引數傳給類,為什麼不能直接對類的陣列進行操作?

11樓:愛之尊者

你說不行的**段,關鍵在這:62616964757a686964616fe78988e69d8331333361313935(簡稱為**①)

student stu = new student[5];

admin a = new admin();

a.wyx(stu);

以及呼叫的時候:(簡稱為**②)

public void wyx(student stu)

而後面你說可以的方法是這樣的(簡稱為**③)

public void wyx(student stu)

為什麼不可以?這裡你首先要清楚你在wyx方法裡用到的形參是乙個student物件的陣列,在**②中,你直接使用stu[0].setname(name);,那麼要想取得它的前提就是你的下標0有存在的物件,也就是你必須在你**①裡給你的stu 物件的0下標賦值,也就是:

stu[0] = new student();

否則你只是給陣列開闢了大小,但並未在相應的位置給定例項化的物件,那麼你在**段②裡直接引用是引用到空指標上的,並不存在物件。恰好你在**①中就只是使用了

student stu = new student[5];

並沒有對陣列裡的做物件的初始化,所有你這個**執行時會出錯。

**段③裡,就恰恰符合上面所說,你建立乙個新的物件:

student stud = new student();

再給它賦值了name,最後把這個物件給了stu陣列物件的0下標

stu[0] = stud;

這樣你的stu[0]具有正確的物件引用,你在後面的輸出中呼叫它就正常了。

如果說你要前面方法可用,改為下面方式:

public class 類對類的操作

}另外有一些簡單的建議:

你的**段裡對陣列的寫法使用的是student stu,那麼比較建議的寫法是student stu;

如果你真的要傳遞student stu = new student[5];,那麼有兩種建議:

① 你給你的陣列物件先例項化好,可以用迴圈,如果沒學到迴圈,可以乙個乙個建立;

② 如果不想在建立時候就例項化,那麼也可以在使用的時候進行判斷,判斷如果是空引用,不包含物件再進行例項化,關鍵**如下:

if (null == stu[0])

12樓:一別永別

因為你的student[5]並沒初始化5個student物件,只是建立了乙個可以容納5個student物件的陣列

為什麼我們只能在地球上生活,為什麼人類只能在地球上生活

為什麼地球上會出現生物?這與地球所處的宇宙環境和地球本身的條件有關。地球與太陽的距離適中。地球與太陽相距1.5億千公尺,這樣的距離使地球表面的平均氣溫保持在15 左右,有利於生命的發生和發展。如果距離太陽太近,溫度過高,則由於熱擾動太強,原子根本不能結合在一起,也就不可能形成分子,更不用說複雜的生命...

為什麼題主只能採納回答,為什麼題主只能採納乙個回答?

這就如同某一專案決冠亞軍一樣,冠軍只能是唯一的,你說亞軍就不優秀了嗎 因為每個平台都有他自己的規則,不可能同乙個答案有多個採納嗎?這又不是多選題。我還有時候回答十個也沒有得到優質回答。湊夠三十不玩了。費勁。我也有這樣的疑惑,有時候好幾個答案都很好,很難取捨,最後只好都不採納。這個我覺得是合理的 1 ...

足球為什麼只能換球員,足球為什麼只能換三個球員?

相比其他的團隊型球類運動,比如籃球 排球 冰球 橄欖球 曲棍球等等,足球比賽的換人次數的確是最少的。現代足球運動有不少延續了很多年的悠久傳統,正式比賽每場只允許換三個人,就是傳統之一。全場只允許三個換人,讓足球成為限定性極強的球類專案,對於球隊主帥執教技藝的要求也就更高了。一方面,首發球員不能大規模...

為什麼只能娶老婆呢,為什麼只能娶乙個老婆呢?

男女平等是乙個方面,另外就是人口中男女比例差不多 中國男的還明顯多 你要多娶了,別人怎麼辦?另外,古代有錢人三妻四妾,家庭能夠和睦相處的,一百個也找不出乙個 這是 老殘遊記 中的原話。如果在男女平等的情況下,根據提問者的觀點可以反推出 女人是不是可以嫁好幾個男人,反正嫁幾個無所謂只要有感情而且都是真...

為什麼蜉蝣只能活一天,蜉蝣為什麼只能活一天

地球上有千千萬萬種物種,無論植物還是動物都逃脫不了死亡,有一種昆蟲的生命時長大約一天,那就是蜉蝣,為什麼蜉蝣只能活一天?蜉蝣的口器已退化,不能再取食,是被餓死的,因此90 的蜉蝣只能活0.6 2.0天,目前為止,發現蜉蝣壽命最長者 雄性6.7天,雌性3.9天,最短者 雄性0.8天,雌性0.2天 因為...