2012-11-17 74 views
3

道歉,如果這是一個愚蠢的問題,但我是一個新手,無法在任何地方找到答案。我已經聲明五保對象(Fraction對象),像這樣的數組:將對象數組傳遞給Objective C中的函數 - 並返回一個對象

Fraction *fractArray[5]; 

我現在想通過這個數組(或指向它,至少)到C風格的功能,將對數組中的分數做各種事情並返回一個分數。聲明指向數組後(稱之爲* fractPointer)我試圖建立一個功能,如:

Fraction* arraySum (Fraction *fractPointer, int arraySize) 
{ 
    // dostuff , then return a fraction as the result 
} 

......並把它傳遞預定義的指針和數組的大小。我通過調試建立了fractPointer成功地指向了第一個數組元素。指針也指向最初在函數中的正確位置。但我似乎無法獲得指向數組中下一個對象的指針。當我做fractPointer++;時(當在函數中聲明一個新的Fraction指針時,它一直在拋出錯誤)。抱怨是我正在對指向Fraction的指針進行算術運算,該指針的大小不是固定的。我是否全部錯了?

回答

2

當傳遞給函數時,數組衰減爲指針。所以,你需要聲明你的函數是這樣的:

Fraction *arraySum (Fraction **fractPointer, int arraySize); 

Fraction *arraySum (Fraction *fractPointer[], int arraySize); 

爲了得到它的工作。

+0

謝謝!第一種語法工作得很好。我顯然需要提高對指針和數組re:函數的理解。 –

-1

注意你如何聲明你的數組:Fraction *fractArray[5]。另一種編寫方式是Fraction **fractArray。一組指針。因此,要將該數組傳遞給另一個函數,您需要使用相同類型 - Fraction**Fraction *foo[]

這與「衰減」無關 - 它與您從示例中刪除間接級別完全相同。即不能將int intArray[5]傳遞給帶參數int的函數 - 函數需要採用整個int array[]

+0

「這與'腐爛'無關'」 - 它確實和「Fraction * fractArray [5]'。另一種寫法是'Fraction ** fractArray'」是錯誤的,數組不是指針。 – 2012-11-18 21:38:31

+0

即所謂的衰減發生沒有爭議,它只是沒有關聯。無論您是希望爲函數參數使用指針還是數組語法,結果都是一樣的 - 傳遞一個指針。 OP的唯一問題是他們錯過了必要的間接級別,因此試圖將一組Foos放入一個僅指定參數的參數中。 –

+0

另外,指出雖然數組語法(包括指定大小)被函數參數接受,但它確實被視爲指針。指針不知道它們指向的_many_項目。只是一致地使用指針語法比較安全,以避免認爲參數「int numbers [10]」會對數組大小進行編譯時檢查 - 它不會。 –