如何通过指针将数组加载到函数中并将它们用于该函数中的计算

问题描述 投票:0回答:1

我试图通过使用指针使我的代码更专业。我正在使用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_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 ;

}
c arrays pointers
1个回答
2
投票

由于operator precedence,表达式*xfilt1a+1等于(*xfilt1a)+1。也就是说,它采用xfilt1a指向的值(这是第一个值)并将1添加到其中。

你想用*(xfilt1a+1)代替。这与xfilt1a[1]完全相同。

© www.soinside.com 2019 - 2024. All rights reserved.