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天 因為...