将传递给函数的指针保存到C中的数组

时间:2015-03-30 04:26:14

标签: c arrays

我发现这很难解释,但我会尽我所能。我正在将一个数组传递给一个函数。我希望能够在函数中获取数组的指针,并将数组的值放回函数中的数组中。

如果这没有意义,也许这段代码会让你知道我想要尝试的东西。

#define LENGTH 3
void FIR(short *filter) {
    short temp[LENGTH] = {*filter, *(filter+1), *(filter+2)};
}
int main() {
    short filter[LENGTH] = {1,2,5};
    FIR(filter);
}   

此代码有效但如果过滤器长度很长则非常荒谬。我怎么能为任何长度的滤波器阵列做这个?请记住,我正努力保持效率。

6 个答案:

答案 0 :(得分:1)

使用循环,*(filter+x)等同于filter[x]

#include <stdio.h>
#define LENGTH 3
void FIR(short *filter) {
    short temp[LENGTH];
    int i;
    for(i = 0; i < LENGTH; ++i){
        temp[i] = filter[i];
    }
}
int main() {
    short filter[LENGTH] = {1,2,5};
    FIR(filter);
    int i;
    for(i = 0; i < LENGTH; ++i){
        printf("%d ", filter[i]);
    }
}

答案 1 :(得分:0)

您可以使用循环使代码看起来不错,或者只使用memcpy()复制整个数组。

void FIR(short *filter)
{
   short temp[LENGTH];
   int i=0;
   for(i=0;i<LENGTH;i++)
   temp[i] = filter[i];
   // or memcpy(temp,filter,sizeof(short) * LENGTH);
}

既然你谈到效率,那就选择后一种方法,即memcpy()

答案 2 :(得分:0)

最有效的方法可能是记忆。因为你知道数组的类型和大小。

#define LENGTH 3
void FIR(short *filter) {
    short temp[LENGTH];
    memcpy(temp, filter, sizeof(short)*LENGTH)
}

答案 3 :(得分:0)

您可以使用memcpy(),也可以在循环中初始化本地数组。例如,

void FIR(short *filter) {
    short temp[LENGTH];
    memcpy(temp, filter, LENGTH * sizeof(short));
}

void FIR(short *filter) {
    short temp[LENGTH];
    int i;

    for (i = 0; i < LENGTH; i += 1) {
        temp[i] = filter[i];
    }
}

答案 4 :(得分:0)

除了memcopy()之外,一种方法是使用指针:

void FIR(short *filter)
{
   short temp[LENGTH], *tempP;
   int i = 0;

   tempP = temp;
   while(LENGTH > i++) *tempP++ = *filter++;

}

答案 5 :(得分:0)

如果您希望长度可变,请使用此

#include <stdio.h>

void FIR(short *filter, int length) {
    short *temp = new short[length];
    int i;
    for(i = 0; i < length; ++i){
        temp[i] = filter[i];
    }
}

int main() {
    short filter[3] = {1,2,5};
    FIR(filter, 3);
    int i;
    for(i = 0; i < 3; ++i){
        printf("%d ", filter[i]);
    }
}