Hi,在C裡我想寫一個函數他是做linear interpolation我想我自己應該會做不過我唯一的困難是如寫函數時如何以陣列為參數double Interp1(數字陣列1, 數字陣列2, 數字)C裡可以以數字陣列當成參數嗎?
2006-09-01 02:29:16 · 1 個解答 · 發問者 ? 4 in 電腦與網際網路 ➔ 程式設計
可以,不管是什麼陣列都可以,參數的傳遞可以傳遞變數,也可以傳遞指標,變數就是實際儲存資料的地方,變數的資料型態多大,變數所佔據的記憶體空間就是多大,傳遞變數時,事實上編譯器會複製一份這個變數,傳遞給函數使用,也就是說,變數傳遞之後,不管函數怎麼修改傳進來變數的數值,原來的變數都不會受影響,因為函數修改到的是這個原來變數的副本。指標,事實上就是指到某個變數的位址,如果用一棟房子來比喻變數,那麼指標就相當於這棟房子的地址。指標本身只是一組數值,所以幾乎所有的指標都有相同的大小﹙就是一個長整數的大小﹚,指標本身當然不包含變數內的資料﹙因為他只是變數的地址,而地址不代表房子﹚,但我們可以利用指標去存取變數的資料﹙從地址可以找到房子﹚因此,如果想要傳遞陣列其實有兩種方式,第一種就是把固定大小的陣列當成一種資料型態,把整個陣列當成變數傳遞過去,這時候資料傳遞就是複製整個陣列並傳遞,但這樣的缺點就是首先,陣列大小必須固定,其次,如果陣列很大,必須浪費很多時間在複製資料上,第三個特性就不一定是缺點,就是當你傳遞整個陣列時,函數得到的是陣列的副本,因此修改傳入的陣列時,對原來的陣列不會有任何影響第二種方法,是比較常見的方法,就是只有傳遞陣列的指標,這樣的方法就相當於你告訴函數這個陣列在哪邊,於是你的函數就可以直接去存取這個陣列了,這方法陣列只有一個,函數會修改到原本的陣列方法一範例:typedef struct{int MyNum[10];//宣告想要傳遞的陣列,必須固定大小}MyArray;void MyFunc(MyArray InArray){//讓函數傳入整個陣列//進行所需的操作}int main(void){//主流程,這裡用來呼叫函式MyArray Test;//宣告想要傳遞的陣列MyFunc(Test);//將陣列傳遞一份副本給函數,但原來陣列不受影響return 0;}方法二範例:void MyFunc(int *InArray){//傳入陣列指標給這個函數//對這個陣列進行操作}int main(void){//主流程,這裡用來呼叫函式int Test[10];//宣告想要傳遞的陣列,大小不一定要固定MyFunc(Test);//將陣列指標傳遞給函數,原來陣列會受影響return 0;}
2006-09-01 04:41:50 · answer #1 · answered by Rody 5 · 0⤊ 0⤋