我发现这很难解释,但我会尽我所能。我正在将一个数组传递给一个函数。我希望能够在函数中获取数组的指针,并将数组的值放回函数中的数组中。
如果这没有意义,也许这段代码会让你知道我想要尝试的东西。
#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);
}
此代码有效但如果过滤器长度很长则非常荒谬。我怎么能为任何长度的滤波器阵列做这个?请记住,我正努力保持效率。
答案 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]);
}
}