在大多數情況下,數組類型的表達式將被轉換爲指針類型的表達式;這意味着當您將數組表達式作爲參數傳遞給函數時,函數將接收的是一個指針。數組表達式是sizeof
或一元運算符&
的操作數,或者是用於在聲明中初始化數組的字符串文字時,此規則的例外情況。
在函數參數聲明的上下文中,T a[]
和T a[N]
的處理方式與T *a
相同;所有這三個都聲明a
作爲指向T
的指針,而不是作爲T
的數組。
因此,通過您聲明
float state[6];
float err[6][6];
表達state
的類型去是「的float
6-元件陣列」,這在大多數情況下將被轉換爲「指針float
」,或float *
。類似地,表達式err
的類型是「float
的6元件陣列的6元件陣列」,其將被轉換爲「指向6元件陣列float
」或float (*)[6]
。
類型表達&state
的是「指針至6個元素的數組的float
」,或float (*)[6]
,以及&err
類型是「指針至6個元素的數組的float
6-元件陣列的」,或float (*)[6][6]
。
因此,如果調用func
是
func(&state, &err);
那麼原型必須
void func(float (*state)[6], float (*err)[6][6])
,你需要明確取消引用state
和err
應用任何標前:
(*state)[i] = ...;
(*err)[i][j] = ...;
如果電話是
func(state, err);
那麼原型必須
void func (float *state, float (*err)[6])
,你會不會需要明確取消引用要麼state
或err
:
state[i] = ...;
err[i][j] = ...;
那麼,你用哪個呢?就我個人而言,我會選擇第二種選擇。它有點乾淨。
它期待着一個指向指針的指針,但你給它一個指針。你不應該需要參數中的指針,只需要float state []。 – Julio 2012-07-20 15:16:07
狀態和錯誤是輸出參數。我想修改它們是什麼。 – CodeKingPlusPlus 2012-07-20 15:18:37