[英]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.