【发布时间】:2015-07-27 18:43:52
【问题描述】:
这是我用普通 C 语言编写的代码。我想添加数据的每一列。例如 28+518+917、34+512+914 等:
short rawdata[][20]={
28,34,36,39,42,47,37,41,41,33,33,36,36,36,27,27,24,31,29,26,
518,512,507,508,521,522,524,525,519,512,506,511,511,501,501,495,497,500,508,504,
917,914,905,909,892,879,869,873,876,877,875,870,883,893,893,884,881,882,885,888
};
int aae( int nLenFrame, short **psDataBuffer, float *pFV )
{
float sum = 0.0;
int i=0, j;
for (j=0; j<AXES; j++)
{
printf("Component: %d\n", *(*(psDataBuffer +j) + i));
}
return 1;
}
int main(int argc, char *argv[]){
int arraySize;
float pFV;
int a;
arraySize = sizeof(rawdata)/sizeof(int);
a = aae( arraySize, rawdata, &pFV );
printf("aae = %f\n", pFV);
}
我正在尝试将 rawdata 传递给函数 aae,但是当我编译时,我从 gcc 收到以下错误/警告,这自然会使我的代码崩溃。我应该如何将rawdata 传递给aae?
$ gcc aae.c -o aae
aae.c: In function ‘main’:
aae.c:31:2: warning: passing argument 2 of ‘aae’ from incompatible pointer type [enabled by default]
a = aae( arraySize, rawdata, &pFV );
^
aae.c:13:5: note: expected ‘short int **’ but argument is of type ‘short int (*)[20]’
int aae( int nLenFrame, short **psDataBuffer, float *pFV )
^
提前感谢您的帮助。
【问题讨论】:
-
错误信息包含一个非常明确的提示,说明如何声明参数(参见“注释”)。
-
Joachim 所说的或者(如果你想要 dirtier 路径)传递为
&(rawdata[0])... -
@FelixPalmen 第二种解决方案可能会消除错误,但仍然不正确。参见例如this old answer of mine 解释一下。
-
是的,你是对的,它应该是
&(rawdata[0][0])和一个只接受short *的参数。如果您希望它适用于不同的行长度 ...,则适用 -
我重申我原来的评论:阅读错误信息,它告诉你应该做什么。如果您看到“注释”,编译器会说您将
short int (*)[20]作为类型传递,所以只需像这样声明参数short (*psDataBuffer)[20]。原因是数组,当您将它们传递给函数时,会衰减为指针,因此数组数组会衰减为指向数组的指针,这就是新的声明。
标签: c arrays function argument-passing