簡體   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