2012-10-28 43 views
0

我很抱歉,如果這是一個重複的問題,但我似乎無法找到關鍵字來搜索我要問的問題。C傳遞參數在哪個陣列上工作

基本上,我已經定義了自己的結構。

#define max_terms 101 

typedef struct{ 
    int row, col, value; 
} term; 

現在我有三個不同的方面即[MAX_TERMS],B [MAX_TERMS]和C [MAX_TERMS] 我想輸入下列函數的參數,這樣我可以選擇在這工作三種定義陣列中的一種

void input(/*parameter here*/){ 
    a[0].row = 0; // want to be able to choose the array to work on instead of just a 
} 

謝謝您的閱讀!

回答

3

最簡單的方法是將指針傳遞給函數的第一個元素。

void input(term *a) 
{ 
    a[0].row = 0; 
} 

/* ... */

term b[max_terms]; 
input(b); 

正如評論giorashc筆記,如果陣列並不都使用相同的大小,你會想通過實際大小作爲附加參數。

+2

傳遞大小也可能是一個很好的方式不溢出給定的數組 – giorashc

+0

非常感謝! –

1

你有兩個共同的選擇:

void input(term *t, size_t size) 

和:

void input(term t[], size_t size) 

它們的含義相同。傳遞論證對兩者都是一樣的。當你有:

term t[SIZE]; 

接着是被那些將工作:

input(&t[0], SIZE); 

或:

input(t, SIZE); 

顯然,第二是方便多了。它意味着與第一個一樣;這只是一個更短的寫法。 C允許這樣做,因爲傳遞數組的第一個元素的地址是一個非常常見的操作。