2012-09-02 157 views
0

我有一個函數,它需要一個固定大小的數組。該數組的內容將在此函數中進行修改,因此我想將該數組作爲指針傳遞。傳遞數組作爲指針

這裏是我的數組的定義:

int u[] = {1, 0 , a}; //a is an integer 
int v[] = {1, 0 , a}; //a is an integer 

這裏是我的原型:

void New_Values(int* u[3], int* v[3], const int q); 

這裏是我的函數調用:

New_Values(&u, &v, q); //q is an integer 

我得到的編譯器錯誤:

從兼容的指針類型傳遞 'New_Values' 的參數1

從兼容的指針類型傳遞 'New_Values' 的參數2

+0

閱讀[comp.lang.c常見問題](http://www.c-faq.com)的第6部分。 –

回答

4

只有特別會要一個指針傳遞給數組的功能;你最有可能做到像其他人所說:

void New_Values(int u[], int v[], int q); 
void New_Values(int *u, int *v, int q); 

(這些聲明是等價的,編譯器將前者,就好像它是這樣寫的是後者,所以經常會看到簡單的指針符號,而,比數組符號)

和呼叫:

New_Values(u, v, q); 

如果你真的想與指向數組的指針玩,你必須使用正確的符號 - 你試圖指定爲整數數組的指針是什麼,而不是指向整數數組的指針。

void New_Values(int (*v)[], int (*v)[], int q); 

和呼叫:

New_Values(&u, &v, q); 

裏面New_Values(),你會使用:

(*v)[i] = (*u)[j] + q; 

這是C的的說明 '的聲明語法使用時匹配的語法'。

請注意,我從int參數中刪除了const。它並不完全沒有意義,但如果修改參數,被調用的函數在調用函數中不會修改其值。

3

只要使函數取指針:

void New_Values(int *u, int *v, const int q); 

還有隻是像數組一樣使用它們。在這種情況下,數組衰減成一個指向第一個元素的指針。此外,您應該從函數調用中刪除&,並且只需說:New_Values(u, v, q);

1

只需將數組名稱作爲數組衰減傳遞到指針即可。

通行證爲:

New_Values(u, v, q); 

和函數原型:

void New_Values(int* u, int* v, const int q);