繁体   English   中英

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

[英]Save pointer passed to function to array in C

我觉得这很难解释,但我会尽力而为。 我正在将数组传递给函数。 我希望能够在函数中获取数组的指针,并将数组的值放回函数中的数组。

如果那没有意义,也许这段代码会让您了解我要尝试的工作。

#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);
}   

这段代码有效,但是如果过滤器长度很长,那是很荒谬的。 如何针对任何长度的过滤器阵列执行此操作? 请记住,我正在努力保持效率。

使用循环, *(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]);
    }
}

您可以使用循环来使代码看起来不错,也可以仅使用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()

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

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

您可以使用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];
    }
}

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

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

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

}

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

#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]);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM