C 如何通过指针将数组加载到函数中,并在该函数中使用它们进行计算

C 如何通过指针将数组加载到函数中,并在该函数中使用它们进行计算,c,arrays,pointers,C,Arrays,Pointers,我试图通过使用指针使我的代码更专业。 我用的是C。 我的目标是尽可能多地使用指针。 我有一个移动滤波信号值的函数。有4个过滤步骤,每个步骤包含3个值。filta,filtb,filtc,filtd,还有新的数据需要转移 这是我的工作代码。确实非常庞大 float32_t* FilterShift_inCapsulated( float32_t xfilt1a_0, float32_t xfilt1a_1, float32_t xfilt1a_2) { //values ar

我试图通过使用指针使我的代码更专业。 我用的是C。 我的目标是尽可能多地使用指针。 我有一个移动滤波信号值的函数。有4个过滤步骤,每个步骤包含3个值。filta,filtb,filtc,filtd,还有新的数据需要转移

这是我的工作代码。确实非常庞大

float32_t*  FilterShift_inCapsulated( float32_t   xfilt1a_0,  float32_t  xfilt1a_1,  float32_t xfilt1a_2) 
{
    //values area loading normal way

    float32_t xfilt1a[3],shiftedvalues[15];
    float32_t*  shiftedvaluesP;

   xfilt1a[0]=  xfilt1a_0;  // i am sending them to arrays 
    xfilt1a[1]= xfilt1a_1;  //bc i want use them in "for" loop.
    xfilt1a[2]=xfilt1a_2;


int8_t ix = 0;
for (ix = 0; ix <2; ix ++)
{
    xfilt1a[ix] = xfilt1a[ix+1];   //index 1 of array shifts to 0
 }                                 //index 2 of array shifts to 1


    shiftedvalues[0]=xfilt1a[0];  //need to  take that values back
    shiftedvalues[1]=xfilt1a[1];   
    shiftedvalues[2]=xfilt1a[2];


    shiftedvaluesP=shiftedvalues // take the adress of the array and return it; 

return  shiftedvaluesP;
}
float32*FilterShift\u封装(float32\u t xfilt1a\u 0、float32\u t xfilt1a\u 1、float32\u t xfilt1a\u 2)
{
//以正常方式加载区域的值
float32_t xfilt1a[3],移位值[15];
浮动32_t*移位值sp;
xfilt1a[0]=xfilt1a_0;//我正在将它们发送到阵列
xfilt1a[1]=xfilt1a_1;//bc我想在“for”循环中使用它们。
xfilt1a[2]=xfilt1a_2;
int8_t ix=0;
对于(ix=0;ix,因为表达式
*xfilt1a+1
等于
(*xfilt1a)+1
。也就是说,它取
xfilt1a
指向的值(这是第一个值),并将
1
添加到该值上

您需要使用
*(xfilt1a+1)
来代替。它完全等于
xfilt1a[1]
,因为表达式
*xfilt1a+1
等于
(*xfilt1a)+1
。也就是说,它接受
xfilt1a
指向的值(这是第一个值),并将
1
添加到该值中


您想改用
*(xfilt1a+1)
,这正好等于
xfilt1a[1]

您的函数被声明为返回某个值,但您从未这样做。如果您返回
shiftedvalues sp
,则它指向一个局部变量,该变量将超出范围,并在返回时立即消失。那么我应该如何返回值?关于循环,请将.Pass
shiftedvalues
作为函数。最后,你的问题真的太广泛了。请每个问题回答一个问题。你的函数被声明为返回某个值,但你从来没有这样做。如果你返回
shiftedvaluesP
,那么它指向一个局部变量,当你返回时它将超出范围并立即消失。那么我应该如何返回我的值呢?Regar在循环中,查看。将
shiftedvalues
作为参数传递给函数。最后,您的问题非常广泛。请每个问题回答一个问题。谢谢回答;我编辑了我的问题。您能看一下注释行吗?谢谢回答;我编辑了我的问题。您能看一下注释行吗。
float32_t*  FilterShift_inCapsulatedwithPointer(float32_t*   xfilt1a) 
{
    //xfilt1a is an array . 

    float32_t filt1a[3],shiftedvalues[15];
    float32_t*  shiftedvaluesP;

 filt1a[0]= *xfilt1a;   // should i use itlike this   *(xfilt1a+1)  or like this *xfilt1a+1   
     filt1a[1]= *xfilt1a+1;
        filt1a[2]=*xfilt1a+2;


int8_t ix = 0;
for (ix = 0; ix <2; ix ++)
{
    filt1a[ix] = filt1a[ix+1];
// i want to avoid using real values here . can i use pointers here ?
//memcpy(destination, source, sizeof(source)); 
}


    shiftedvalues[0]=       filt1a[0];
    shiftedvalues[1]=   filt1a[1];
    shiftedvalues[2]=       filt1a[2];



    shiftedvaluesP=shiftedvalues ;

}