在大多数情况下,数组类型的表达式将被转换为指针类型的表达式;这意味着当您将数组表达式作为参数传递给函数时,函数将接收的是一个指针。数组表达式是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